私は、ウィンドウのグローバルスコープから利用可能なjavascriptオブジェクトのツリー全体を通して再帰を行っています。IE再帰におけるスタックオーバーフロー - > window.framesがそれ自身と等しくない
Chrome、Firefox、Safariではすべてうまく機能しますが、Internet Explorerでは少し問題があります。
基本的に私はツリーを横切るようにオブジェクトのスタックを構築しているので、オブジェクトの行が複数の場所に配置されていることを確認できます。たとえば、私はチェックします。
var ignoreStack = [window, document]; // grows over time to contain every object
ignoreStack.contains = function(obj) {
for(var i=0;i<this.length;i++) {
if (this[i] === obj) {return true;}
}
return false;
};
// ... further down the line inside a recursion
if (!(obj instanceof Object)) {return;}
for (var prop in obj) {
if (ignoreStack.contains(obj[prop])) {return;}
ignoreStack.push(obj[prop]);
recurse(obj[prop], prop);
}
今、唯一の問題は、それは次のことをチェックするときです:
// Returns true in Chrome, Safari and Firefox
console.log(window.frames.frames === window.frames);
// Return false in IE
ツリー内の他のすべてのオブジェクトは、それ自体に等しく、しかしwindow.frames
IEでその真実ではない唯一の例外のようです次のように再帰をオンに続けて、それ自体に、:
// window.frames.frames.frames.frames.frames ...etc
誰もがwindow.frames
は、それ自体に等しくない理由の任意のアイデアを持っていますか?
私は、IEデベロッパーツールを使用してGoogleでいくつかの掘り下げやデバッグを試みましたが、私が集めることができるのは、タイプDispHTMLWindow2
のオブジェクトです(それほど意味がありません)。(それは他のブラウザと異なります)オブジェクトも配列もありません。
// Returns true in Chrome, Safari and Firefox
console.log(window.frames instanceof Object);
// Return false in IE
誰かがIEでwindow.frames
がはるかに高く評価されるだろう(無限再帰のこのタイプを引き起こす)、他のJavaScriptのオブジェクトとは異なり振る舞う理由にいくつかの光を当てることができれば。
ありがとうございます。
私は、その特定の項目タイプに対して正しい等価操作が存在しなかった可能性が高いと思います。 – jcolebrand