в IE.
window === top; // false
window === window.window // false
window == top; // true
window == window.window // true
В FF3.6 и Chrome stable этого не происходит.
В IE typeof
, .toString
, Object.prototype.toString.call
все возвращают одинаковые значения для обоих top
& window
Это связано с этим .
Может кто-нибудь сказать мне, почему IE не может сделать строгую эквивеланс?
Обратите внимание, что циклическая ссылка не вызывает проблем как в IE, так и в Chrome.
o = {};
o.o = o;
o === o.o; // true
Получается
window.window === window.top; // true
window.window === window.self; // true
Так что проблема с получением window
самостоятельно.
for (var i in window) {
if (window.window[i] !== window[i]) {
console.log(i); // external, frames, clipboardData
}
}
[Изменить]
Это просто глупо сейчас:
window.frames === window.frames; // false
window.frames == window.frames; // false
window.external == window.external; // true
window.external === window.external; // false
window.clipboardData === window.clipboardData; // false
window.clipboardData == window.clipboardData; // false
[Дальнейшее редактирование]
Оказывается, что window.frames содержит указатель на отладчик ie. Таким образом, при открытом отладчике объект window
изменяется. Мне нужно еще провести тестирование.
window.frames.location === window.frames.location; // false
window.frames.location == window.frames.location; // true
window.frames.event.boundElements == window.frames.event.boundElements; // false
Не говоря уже о том, что window.external
просто не играет красиво
>>for (var i in window.external) alert(i);
"Object doesn't support this action"