JavaScript: когда я передаю массив из функции iframe, массив теряет свой тип! - PullRequest
1 голос
/ 20 января 2009

У меня есть iframe в форме. Iframe содержит некоторую информацию, которую я хочу доставить родителю формы с помощью экземпляра Array. Проблема: экземпляр 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]);
}

Где SuppliersIDs - это доставленный массив, а arr - новый массив истинного типа. Но почему это не работает так, как я хочу? Кстати, есть ли способ получить доступ к функции iframe с помощью jQuery ??

Спасибо за помощь.

Ответы [ 3 ]

8 голосов
/ 20 января 2009

Поскольку каждая страница имеет глобальный контекст со своей собственной функцией «Массив», если код на одной странице передает массив функции на отдельной странице, проверка «экземпляра массива массива» завершится неудачей. Для массива вы можете сделать это вместо:

var arr = top.frames["sup_search"].getIDS2();
var isArray = arr && Object.prototype.toString.call(arr)=="[object Array]";

Это кажется хакерским, но это работает.

0 голосов
/ 20 января 2009

Я нашел способ доступа к функции iframe с помощью jquery

$(this).contents()[0].defaultView.yourFunc()
0 голосов
/ 20 января 2009

@ Дарин спасибо за ответ. Вы определенно нашли проблему На самом деле я хочу сделать кастинг. Мне нужно получить его как массив, как источник. Я написал код так:

var arr = new Array(SuppliersIDs);

Результатом является массив объектов, а не массив целых чисел, как в оригинале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...