【问题标题】:"Stack overflow in line 0" on Internet ExplorerInternet Explorer 上的“第 0 行堆栈溢出”
【发布时间】:2010-09-18 13:45:28
【问题描述】:

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

很明显,问题不在第 0 行,而是在我正在写入文档的内容列表中的某个位置。在 Firefox 中一切正常,所以我没有 Firebug 和朋友们帮忙排查问题的乐趣。

这有什么标准原因吗?我猜这可能是 Internet Explorer 7 的错误或一些非常模糊的东西,而我的 Google-fu 目前给我带来了一点快乐。我可以找到很多以前遇到过这个问题的人,但我似乎无法找到他们是如何解决的。

【问题讨论】:

  • 讨厌这个有 10k 的浏览量。
  • 这是一个非常常见且通用的错误消息 - 它可能出于多种原因而出现,并且完全无法解释自己。如果它说“无限循环”之类的,那么找出原因会容易得多。
  • 有时我不明白为什么突然一个问题引起了所有人的关注...该死的:)或:(
  • 我很确定引起注意是因为它是一种非常常见的错误消息,而且不是一丁点不言自明的错误消息...

标签: javascript internet-explorer error-handling


【解决方案1】:

我最近遇到了这个问题,并写了一篇关于我们代码中导致这个问题的特殊情况的帖子。

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

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

【讨论】:

  • 对问题根源的非常有趣的洞察。
【解决方案2】:

啊哈!

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

对于有类似问题但不一样的人,我猜这个问题的原因很可能是一个未终止的循环、一个触发自身的事件处理程序或类似的东西让 JavaScript 引擎陷入困境。

【讨论】:

  • 这有点类似于我的问题。我不确定“递归”是如何发生的,但我在某些 iframe 中使用了一个缺失的资源(empty.html),并且在我的一个部署中缺少 empty.html。我根据这个答案检查了我的访问日志,找到了 404 并添加了丢失的文件。瞧!
【解决方案3】:

您可以关闭 Internet Explorer 中的"Disable Script Debugging" 选项,然后使用Visual Studio 开始调试(如果您碰巧有)。

我发现这是诊断其中一些IE 特定问题的少数方法之一。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 谢谢,这也是我的问题。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      还有 smartNavigation="true" 会导致这种情况"

      【讨论】:

        【解决方案7】:

        我设置了一个默认项目,发现如下:

        问题是smartNavigation 和maintainScrollPositionOnPostBack 的组合。仅当两者都设置为 true 时才会发生错误。

        就我而言,错误是由以下原因产生的:

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

        任何其他组合都可以正常工作。

        有人可以确认吗?

        【讨论】:

        • smartNavigation 已被弃用,因此您应该只使用 maintainScrollPositionOnPostBack。这解决了我的问题。
        • 我的用户在我将这些属性添加到 pages 标签后突然开始收到此错误,但仅在使用 IE 时,所以我自己没有遇到此问题。没有任何线索将两者联系在一起,在找到这个答案之前,我完全迷失了解决方案。
        【解决方案8】:

        1. Internet 选项
        2. 工具
        3. 互联网选项
        4. 高级
        5. 导航部分
        6. 单击 > 禁用脚本调试

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

        7. 登录
        8. 你会笑的!

        【讨论】:

        • 这不是治标吗?
        • 只为一名患者治疗症状,可能有数百万患者没有得到治疗。
        【解决方案9】:

        我是“在第 1 行”,但是...

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

        【讨论】:

        • 您是否可以克隆一个包含名为clone 的代码的元素?我认为那会产生这种效果。
        【解决方案10】:

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

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

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

        附:也许它会帮助某人

        【讨论】:

        • 像这里的大多数示例一样,这几乎可以肯定是一个递归循环——如果您的propertychange 事件更改了元素的属性,它会再次触发自身,从而导致这种类型的异常。
        【解决方案11】:

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

        【讨论】:

        • 错误的原因通常是一个未终止的循环或递归调用,只会使 Javascript 引擎过载,但这可能以多种不同的方式发生。
        【解决方案12】:

        就我而言,我有两个函数 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();
        

        【讨论】:

          【解决方案13】:

          这是 Java 和 Flash Player 的问题。安装最新的Java和Flash Player,问题就解决了。如果没有,请安装 Mozilla Firefox,它会自动安装所需的更新。

          【讨论】:

          • Java脚本,而不是 Java。 flash 和什么有什么关系?
          猜你喜欢
          • 2019-05-18
          • 2014-12-11
          • 1970-01-01
          • 2010-11-18
          • 1970-01-01
          • 1970-01-01
          • 2021-05-28
          • 1970-01-01
          • 2017-07-02
          相关资源
          最近更新 更多