繁体   English   中英

IE递归中的堆栈溢出-> window.frames不等于自身

[英]Stack Overflow in IE recursion -> window.frames not equal to itself

我正在通过窗口全局范围中可用的整个javascript对象树进行递归。

在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

树中的所有其他对象都等于其自身,但是IE中的window.frames似乎是唯一的例外,它对其自身不正确,因此递归继续如下:

// window.frames.frames.frames.frames.frames ...etc

有谁知道为什么window.frames不等于自己?

我尝试在google中进行一些挖掘并使用IE Developer工具进行调试,我所能收集到的只是它是DispHTMLWindow2类型的对象(这对我来说并不重要),并且(与其他浏览器不同)它既不是Object也不是Object数组。

// Returns true in Chrome, Safari and Firefox
console.log(window.frames instanceof Object);
// Return false in IE

如果有人能阐明IE中window.frames行为不同于其他任何javascript对象(导致这种类型的无限递归)的原因,将不胜感激。

提前致谢。

有关IE中不相等的其他主机对象的相关问题

如果有人能阐明IE中window.frames行为不同于其他任何javascript对象(导致这种类型的无限递归)的原因,将不胜感激。

window.frames是一个宿主对象。 在ES3中,允许主机对象执行其所需的任何操作。 IE因主机对象行为异常而臭名昭著。 您对此无能为力。

我建议您进行肮脏的破解,这是一项硬编码检查,以检查键是否为'frames'以及obj是否为window并忽略整个内容。

window.frames内部还有另外一堆也不起作用的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM