window === top; // false
window === window.window // false
window == top; // true
window == window.window // true
FF3.6 &では、これは起こりません。 IE typeof
、.toString
で
、Object.prototype.toString.call
すべてこれはthisに関連して、両方のtop
& window
のために同じことを返します。
誰でもIEが厳格な公平を行うことができない理由を教えてもらえますか?
循環参照がIE & Chromeで問題を引き起こすことはありません。
o = {};
o.o = o;
o === o.o; // true
だから、それはそれ自身にwindow
を得ることの問題だ
window.window === window.top; // true
window.window === window.self; // true
が判明。
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、すなわちデバッガへのポインタを保持していることが判明しました。したがって、デバッガを開いているとwindow
オブジェクトが変更されます。もう少しテストをしなければならない。 window.external
がちょうどうまく
>>for (var i in window.external) alert(i);
"Object doesn't support this action"
ちょうどIEが動作する奇妙な方法のもう一つの人工物。 IE9を除いて修正される可能性は低い+私は恐れている。 –
@IainBallardは、IEがこれを行う理由、または単にバグであるという論理的な理由はありますか? – Raynos
厳密にはバグですか?それはより機能的であると私には思えますし、なぜあなたは 'window === top'を比較する必要がありますか? '=='がうまくいくようになると、あなたは本当に必要なのでしょうか? –