Internet Explorer上的“第0行堆栈溢出”

时间:2008-10-22 14:55:22

标签: javascript internet-explorer error-handling

我意识到这不是在可搜索性方面询问这个问题的理想场所,但我有一个页面,当我在Internet Explorer中查看它时,其JavaScript代码会引发“第0行堆栈溢出”错误。

问题很明显不在第0行,而是在我写入文档的东西列表中的某个地方。在Firefox中一切正常,所以我没有Firebug和朋友的乐趣来协助排除故障。

这有什么标准原因吗?我猜这可能是一个Internet Explorer 7漏洞或者一些相当模糊的东西,我的Google-fu目前给我带来了一些快乐。我之前可以找到很多遇到这种情况的人,但我似乎无法找到他们是如何解决它的。

13 个答案:

答案 0 :(得分:32)

我最近遇到了这个问题,并在我们的代码中写了一篇关于导致此问题的特定案例的帖子。

http://cappuccino.org/discuss/2010/03/01/internet-explorer-global-variables-and-stack-overflows/

快速摘要是:通过主机全局对象的递归限制为堆栈深度为13.换句话说,如果您的函数调用正在使用的引用(不一定是函数本身)是使用某个窗体窗口定义的.foo = function,然后通过foo递归限制为13的深度。

答案 1 :(得分:20)

啊哈!

我在某些代码中遇到OnError()事件,如果找不到图像源,则会将图像源设置为默认图像路径。当然,如果未找到默认图像路径,则会触发错误处理程序...

对于有类似问题但不相同的人,我猜这个问题的原因很可能是一个未终止的循环,一个触发自身的事件处理程序或类似的东西,它会引发JavaScript引擎旋转。 / p>

答案 2 :(得分:17)

您可以在Internet Explorer内部关闭关闭 "Disable Script Debugging"选项,如果您碰巧使用Visual Studio,则可以使用IE进行调试。

我发现这是诊断某些{{1}}特定问题的几种方法之一。

答案 3 :(得分:7)

我有这个问题,我解决了。名为<%@ Page的{​​{1}}标记中有一个属性,删除后,错误消失了。 我之前添加了它,以防止每次回发后滚动。

答案 4 :(得分:3)

如果您来到这里是因为您的硒测试中存在问题: IE不喜欢By.id("xyz")。使用By.name,xpath或其他任何东西。

答案 5 :(得分:2)

同时使用smartNavigation =“true”会导致此“

答案 6 :(得分:2)

我设置了一个默认项目并找到了以下内容:

问题是smartNavigation和maintainScrollPositionOnPostBack的组合。只有当两者都设置为true时才会出现错误。

就我而言,错误产生于:

<pages smartNavigation="true" maintainScrollPositionOnPostBack="true" />

任何其他组合都可以。

有人可以证实吗?

答案 7 :(得分:1)

  1. 互联网选项
  2. 工具
  3. 互联网选项
  4. 高级
  5. 导航部分
  6. 点击&gt;禁用脚本调试

      

    显示有关每个脚本错误的通知

  7.   
  8. 登录
  9.   
  10. 你会微笑!
  11.   

答案 8 :(得分:1)

我的“在第1行”而不是......

使用jQuery的.clone方法时遇到了这个问题。我通过使用html字符串中的jQuery对象替换了这些:$($(selector).html())

答案 9 :(得分:1)

我在IE8上重现了同样的错误。其中一个文本框有一些事件处理程序来替换无效数据。

$('.numbersonly').on("keyup input propertychange", function () {
    //code
});

在向此文本框输入数据时显示错误消息。我们从上面的代码中删除了事件“propertychange”,现在它可以正常工作。

P.S。也许它会帮助某人

答案 10 :(得分:0)

我不知道该告诉你什么,但jQuery表排序和SEARCH也出现了同样的问题。 如果表格中没有任何内容,例如您正在搜索字符串,那么您也会收到此错误。即使在Google Analytics中,也会经常出现此错误。

答案 11 :(得分:0)

在我的情况下,我有两个函数a()b()。第一个叫第二个,第二个叫第一个:

var i = 0;
function a() { b(); }
function b() {
  i++; 
  if (i < 30) {
    a();
  }
}

a();

我使用setTimeout解决了这个问题:

var i = 0;
function a() { b(); }
function b() {
  i++; 
  if (i < 30) {
    setTimeout( function() {
      a();
    }, 0);
  }
}

a();

答案 12 :(得分:-16)

这是Java和Flash Player的问题。安装最新的Java和Flash Player,问题将得到解决。如果没有,那么安装Mozilla Firefox,它将自动安装所需的更新。