自从升级到Firefox 4.0之后,我注意到控制台有时会出现错误:
尝试在已清除的范围内运行编译脚本
我目前在网上可以找到的关于此的唯一信息是在mozilla groups论坛上,该论坛建议与会话还原有关。就我而言,尽管我无法可靠地重现该错误,但它随时发生,而不仅仅是在还原之后发生。
这是怎么回事?如何停止错误?
自从升级到Firefox 4.0之后,我注意到控制台有时会出现错误:
尝试在已清除的范围内运行编译脚本
我目前在网上可以找到的关于此的唯一信息是在mozilla groups论坛上,该论坛建议与会话还原有关。就我而言,尽管我无法可靠地重现该错误,但它随时发生,而不仅仅是在还原之后发生。
这是怎么回事?如何停止错误?
Answers:
就我而言,这是document.write
导致Windows上Firefox 4、5、6出现问题的方法。Linux版本不受影响。我要做的是覆盖document.write
方法。
我知道document.write
这些天不应该使用,但是deployJava.js
Sun / Oracle编写的标准Java Applet部署脚本正在使用它。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>
我希望这有帮助。但是,我在Internet上看到了很多对我不起作用的“解决方案”。这可能意味着“试图在明确的范围内运行编译脚本”是Firefox JavaScript引擎问题/错误。
我注意到,如果在文档完成加载后使用document.write写入文档,则可能发生此错误(例如,在从JQuery的$(document).ready()方法调用的函数中)。发生这种情况时,Firefox似乎会丢弃旧文档并编写新文档。我不知道这是否是新行为。看来,当您尝试对旧文档进行操作(例如,使用JQuery选择器)时,会收到此错误。对我来说,修复有问题的脚本以在文档加载后不调用document.write可以修复错误。
document.write
加载后使用时,丢弃总是会发生。但是,“清除范围”错误是新错误(并且显然不仅由document.write引起)。
我注意到,如果禁用缓存,则不再在控制台中收到此错误。
检查您的代码中是否有重复的元缓存控件,然后删除其中之一:
<meta http-equiv="cache-control" content="no-cache" />