【问题标题】:Error: Attempt to run compile-and-go script on a cleared scope错误:尝试在已清除的范围内运行 compile-and-go 脚本
【发布时间】:2011-07-22 22:47:04
【问题描述】:

自从升级到 Firefox 4.0 后,我注意到我偶尔会在控制台中收到一条错误消息:

尝试在已清除的范围内运行 compile-and-go 脚本

我目前在网上能找到的唯一信息是在mozilla groups forum 上,其中建议它与会话恢复有关。就我而言,虽然我无法可靠地重现该错误,但它随时都会发生,而不仅仅是在恢复之后。

有什么关系?如何停止错误?

【问题讨论】:

  • 只是一个问题:您是否使用 window.open 在脚本中操作子窗口?
  • 从外观上看,它似乎是一个真正的错误。有传言说这将在下一个错误修复版本中消失。
  • @Rodrigo,你有源链接吗?
  • 最近有一些 bugzilla 条目引用了此类错误,例如 bugzilla.mozilla.org/show_bug.cgi?id=635548
  • 当我将网页链接到自身时,这开始发生在我身上。

标签: javascript firefox firefox4


【解决方案1】:

对我来说(Firefox 11、Firebug 1.9.1)有时会在我刷新页面(F5 或 CTRL+F5)之后,而调试器在断点处暂停。

解决方案似乎是继续执行脚本,并且仅在Firebug 暂停时刷新页面

【讨论】:

    【解决方案2】:

    在我的例子中,是 document.write 方法在 Windows 上的 Firefox 4、5、6 上导致了问题。 Linux 版本不受影响。我必须做的是覆盖document.write 方法。

    我知道现在不应该使用document.write,但是Sun/Oracle 编写的标准Java Applet 部署脚本deployJava.js 正在使用它。 Google 在 Google AdSense 广告中使用它。 document.write 无处不在。

    <script>
        var documentWriteOutput = '';
        var got = document.write;
        document.write = function(arg) { documentWriteOutput += arg; }
    </script>
    <script src="badScriptThatIsUsingDocumentWrite.js"></script>
    <script>
        runBadScriptThatIsUsingDocumentWrite();
        document.write = got;
        // Do whatever you want with the documentWriteOutput
        // e.g. $('#somewhere').html(documentWriteOutput);
    </script>
    

    我希望这会有所帮助。但是,我在互联网上看到了很多对我不起作用的“解决方案”。这可能意味着“尝试在已清除的范围上运行 compile-and-go 脚本” 是 Firefox JavaScript 引擎问题/错误。

    【讨论】:

      【解决方案3】:

      我注意到,如果在文档完成加载后使用 document.write 写入文档(例如,在从 JQuery 的 $(document).ready() 方法调用的函数中),可能会发生此错误。发生这种情况时,Firefox 似乎会丢弃旧文档并编写新文档。我不知道这是否是新行为。似乎当您尝试对旧文档进行操作时,例如使用 JQuery 选择器,您会收到此错误。对我来说,修复有问题的脚本以在文档加载后不调用 document.write 修复了错误。

      【讨论】:

      • 加载后使用document.write总是会发生丢弃。但是,“清除范围”错误是新的(显然不仅是由 document.write 引起的)。
      • 我在 document.write 之后附加到窗口的事件也遇到了同样的问题。 (另见我对这个问题的回答:stackoverflow.com/a/8673541/24197
      【解决方案4】:

      我注意到,如果我禁用缓存,我将不再在控制台中收到此错误。

      【讨论】:

      • 清理缓存帮助我摆脱了这个错误。我也有FF4。感谢您的建议!
      • 另一种方法是shift-refresh(IE,按住shit然后单击刷新),这将强制重新下载页面上的所有内容。不像清除整个缓存那么激烈,但似乎也能正常工作。
      • Ctrl + F5 刷新缓存。不移位。
      • 添加 Shift 键(Ctrl+Shift+R 或按住 Shift 键同时单击刷新)会启动硬刷新,绕过缓存。
      【解决方案5】:

      如果禁用 Firebug(在我的情况下为 1.8),则不会发生该错误。

      【讨论】:

      • 是的。我认为这与 Firebug 和 Firefox 有关
      【解决方案6】:

      检查您的代码中是否存在重复的元缓存控制并删除其中之一:

      <meta http-equiv="cache-control" content="no-cache" />
      

      【讨论】:

        【解决方案7】:

        我也遇到了这个问题,但我重新安装了 FireFox。

        之后错误就消失了。

        【讨论】:

          【解决方案8】:

          当我尝试在从同一个域 iframe 附加的元素上添加事件时,我收到了这个错误。添加了 clone() 并且错误停止了。

          【讨论】:

            【解决方案9】:

            它与萤火虫无关。禁用萤火虫时它“消失”的原因是您不再看到异常。造成这种情况的原因是处理程序附加到现在为空但未正确清理的事件。您需要确保处理程序被正确处理,否则事件仍会触发对处理程序的引用。

            【讨论】:

              【解决方案10】:

              它是:菜单 Firebug -> 控制台 -> 显示 Chrome 错误

              关掉,故事结束;)

              【讨论】:

                猜你喜欢
                • 2011-10-16
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多