JavaScript: когда я передаю массив из функции iframe, массив теряет свой тип!
У меня есть iframe в форме.
В iframe содержится некоторая информация, которую я хочу передать родительскому элементу формы экземпляром Array.
Проблема: экземпляр массива теряет его тип и становится объектом!
Функция iframe:
function getIDS2() { return new Array(); }
Родительский код вызова:
alert(top.frames["sup_search"].getIDS2() instanceof Array);
Конечно, ответ для предупреждения ложный...
Поэтому я могу исправить это, сделав следующее:
var arr = [];
for(var i =0; i < SuppliersIDs.length; i+=1) {
arr.push(SuppliersIDs[i]);
}
Где SuppliersID - это доставленный массив, а arr - новый массив истинного типа.
Но почему это не работает, как я хочу?
Кстати, есть ли там способ доступа к iframe func с помощью jQuery??
Спасибо за помощь.
Ответы
Ответ 1
Поскольку каждая страница имеет глобальный контекст со своей собственной функцией "Массив", если код на одной странице передает массив функции на отдельной странице, тест "массив экземпляра массива" завершится с ошибкой. Для Array вы можете сделать это вместо:
var arr = top.frames["sup_search"].getIDS2();
var isArray = arr && Object.prototype.toString.call(arr)=="[object Array]";
Он чувствует себя взломанным, но он работает.
Ответ 2
@darin спасибо за ответ.
Вы определенно нашли проблему
Фактически я хочу сделать несколько кастингов. Мне нужно получить его как массив, как источник.
Я написал код следующим образом:
var arr = new Array(SuppliersIDs);
Результатом является массив объектов, а не массив целых чисел в качестве оригинала.
Ответ 3
Я нашел способ доступа к функции iframe с помощью jquery
$(this).contents()[0].defaultView.yourFunc()