Мне нужно открыть новое окно браузера из другого окна браузера и получить доступ к объекту из родительского окна в дочернем окне.Поэтому, когда загружается дочернее окно, я использую свойство opener для доступа к объекту из родительского окна.Прекрасно работает в Firefox, однако в IE свойства массива преобразуются в объекты.
Например,
function openChild() {
window.open(window.document.location, '_blank');
}
var data = {
myArray: []
};
$(document).ready(function() {
alert('data is array: ' + (data.myArray instanceof Array));
alert('prototype: ' + (Object.prototype.toString.call(data.myArray)));
if (window.opener) {
var parentData = window.opener.data;
alert('parent data is array: ' + (parentData.myArray instanceof Array));
alert('parent prototype: ' + (Object.prototype.toString.call(parentData.myArray)));
}
});
Когда дочернее окно открывается в IE, результат будет
data is array: true
prototype: [object Array]
parent data is array: false
parent prototype: [object Object]
, и в Firefox получается
data is array: true
prototype: [object Array]
parent data is array: false
parent prototype: [object Array]
Один из способов - слишком сериализовать объект в JSON, передать строку и затем десериализовать.Тем не менее, любые методы на объекте потеряны.
Что еще я могу сделать, кроме как сидеть и говорить о том, как IE - проклятие веб-разработки?