IE6 / 7/8内存不足?

时间:2010-10-11 21:18:52

标签: javascript jquery internet-explorer memory iframe

我今天正在对某些功能进行一些跨浏览器测试,并遇到了一个相当漂亮的小宝石。

在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无关。仍然在挖掘,但任何建议都会受到赞赏。

2 个答案:

答案 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开发人员工具调试代码,您应该得到答案。

如果它不是递归,它可能是一个循环,在它耗尽之前会继续消耗更多的内存。