【问题标题】:IE6/7/8 Out of Memory?IE6/7/8 内存不足?
【发布时间】:2011-04-24 00:40:32
【问题描述】:

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

在 IE8 中:Out of memory at line: 99

在 IE7 中:Out of memory at line: 100

在 IE6 中:Stack overflow at line: 101

据我所知,大多数时候这些消息开始出现,这是一个元素数量大于65,535 的数组的问题。但是,我不认为这是当前的问题。

有问题的功能是来自iframe 中的一个操作,“关闭”当前iframe 并使用jQuery“打开”另一个。它实际上发生在关闭/打开交互中。

有没有人见过这样的事情?

编辑:经过进一步调查,它实际上似乎与 iframe 无关。仍在挖掘,但任何建议将不胜感激。

【问题讨论】:

  • 您测试过哪些其他浏览器以及您添加了多少元素?
  • 在 Linux Chrome 和 FF3.6 和 Windows FF3.6 中运行良好。
  • 堆栈溢出通常是由于无限递归。你确定你的代码中没有这些吗?
  • 这也是我的第一个想法……但我似乎找不到任何东西。我还在挖。

标签: javascript jquery internet-explorer memory iframe


【解决方案1】:

所以事实证明这是 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 不...

不管怎样,我会接受的……

感谢你们的帮助。

【讨论】:

    【解决方案2】:

    看起来你占用了太多内存,而 IE 没有为这种东西分配这么多内存 :) 其他浏览器有。如果您查看您拥有的那些行号或使用 IE8 开发人员工具调试您的代码,您应该会得到答案。

    如果不是递归,它可能是一个循环,不断消耗更多内存,直到用完为止。

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      相关资源
      最近更新 更多