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()