我今天正在对某些功能进行一些跨浏览器测试,并遇到了一个相当漂亮的小宝石。
在IE8中:Out of memory at line: 99
在IE7中:Out of memory at line: 100
在IE6中:Stack overflow at line: 101
从我能够挖掘的内容来看,大多数情况下这些消息开始出现,这是一个问题,即一个数组的元素数量大于65,535
。但是,我不相信这就是现在的问题。
有问题的功能是使用jQuery从iframe
“关闭”当前iframe
和“打开”另一个操作。它实际上发生在密切/开放的互动上。
以前有人见过这样的事吗?
修改:经过进一步调查,它实际上似乎与iframe无关。仍然在挖掘,但任何建议都会受到赞赏。
答案 0 :(得分:11)
因此,事实证明,IE和其他所有处理事情的问题都是不同的......像往常一样。
我有一个函数,我用它来抛出一个错误,它是设计递归的。我希望错误显示在主文档中,而不是iframe(不幸的是,它在本网站上被广泛使用)。我的功能要点如下:
myClass.myErrorFunc = function ( msg ) {
if ( parent !== window ) {
parent.myClass.myErrorFunc( msg );
} else {
// display the error
}
}
这在Chrome和Firefox中效果很好。它递归一级并在主窗口中显示错误,因为一旦它到达顶级,父级就是它自己。然而,显然在IE中,窗口的父亲永远不会。因此,无限递归。
请继续关注解决方案。
修改:显然,使用!==
代替!=
是一个问题。当我将其切换为!=
时,第二次(因为这是从iframe
运行),window == parent
评估为真,但window === parent
没有... < / p>
无论如何,我会接受它......
感谢您的帮助。
答案 1 :(得分:0)
看起来你的内存太多了,IE没有为这种东西分配那么多内存:)其他浏览器都这样做。如果您查看自己拥有的行号或使用IE8开发人员工具调试代码,您应该得到答案。
如果它不是递归,它可能是一个循环,在它耗尽之前会继续消耗更多的内存。