У меня есть 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?
Спасибо за помощь.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поскольку каждая страница имеет глобальный контекст со своей собственной функцией «Массив», если код на одной странице передает массив в функцию на отдельной странице, тест «array instanceof Array» завершится ошибкой. Для Array вы можете сделать это вместо этого:
var arr = top.frames["sup_search"].getIDS2();
var isArray = arr && Object.prototype.toString.call(arr)= = "[object Array]";
Это кажется хакерским, но работает.
@darin спасибо за ответ. Вы определенно нашли проблему На самом деле я хочу провести кастинг. Мне нужно получить его как массив, как источник. Я написал такой код:
var arr = new Array(SuppliersIDs);
В результате получается массив объектов, а не массив целых чисел, как в оригинале.
Я нашел способ получить доступ к функции iframe с помощью jquery
$(this).contents()[0].defaultView.yourFunc()
Это может показаться хакерским, но ECMA-262 определяет поведение
Object.prototype.toString(), поэтому он гарантированно работает в соответствующих реализациях.