我收到来自Firefox“无响应脚本”的错误消息。这个错误是由于我添加到我的页面的一些javascript。
我想知道无响应是否仅由代码循环引起(函数周期性地互相调用或无限循环“)或者可能还有其他原因?
你能帮我调试一下这些错误吗?
感谢
答案 0 :(得分:10)
避免这种情况的一种方法是使用这样的超时来包装性能不佳的代码:
setTimeout(function() {
// <YOUR TIME CONSUMING OPERATION GOES HERE>
}, 0);
这不是防弹解决方案,但在某些情况下可以解决问题。
答案 1 :(得分:8)
当JavaScript代码运行的时间超过预定义的时间时,Firefox将显示一个对话框,其中显示警告:无响应脚本。此时间由设置dom.max_script_run_time和dom.max_chrome_script_run_time给出。增加这些设置的值会导致警告显示频率降低,但会失败:告知您扩展程序或网站的问题,以便您可以停止失控的脚本。
此外:
查找问题的根源
要确定哪个脚本运行时间过长,请单击警告对话框上的“停止脚本”按钮,然后转到“工具”|错误控制台。错误控制台中的最新错误应该识别导致问题的脚本。
检查错误控制台应该很明显你的javascript的哪个部分导致了这个问题。从那里,要么删除有问题的代码,要么以不会占用大量资源的方式对其进行更改。
编辑:正如对该主题作者的评论中所述,强烈建议使用Firebug来调试javascript问题。 Jonathan Snook有一个关于使用断点来调试复杂javascript的有用视频。
答案 2 :(得分:4)
我们需要按照以下步骤在Firefox中停止脚本。
第1步 启动Mozilla Firefox。
第2步 单击Firefox窗口顶部地址栏中的任意位置,以突出显示整个字段。
第3步 输入“about:config”(在此处和整个省略引号)并按“Enter”。 “这可能会使您的保修失效!”可能会出现警告信息;若是,请点击“我会小心,我保证!”按钮打开包含所有Firefox设置的页面。
第4步 在页面顶部的“搜索”框中单击一次,然后键入“dom.max_script_run_time”。设置已定位并显示;它的默认值为10.
第5步 双击该设置以打开“输入整数值”窗口。
第6步 键入“0”并单击“确定”将值设置为零。 Firefox脚本现在无限期运行,不会抛出任何脚本错误。 第7步
重启Mozilla Firefox。
答案 3 :(得分:2)
这个问题的优秀解决方案:How can I give control back (briefly) to the browser during intensive JavaScript processing?,使用Async jQuery插件。我遇到了类似的问题并通过更改我的$ .each for $ .eachAsync
解决了这个问题答案 4 :(得分:1)
js libs
,因为某些方法可能会导致开销。例如。 .htm()
vs .innerHTML