В IE.
window === top; // false
window === window.window // false
window == top; // true
window == window.window // true
В FF3.6 и стабилизации Chrome этого не происходит.
В 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"