1

我还没有看到任何提及这是 David Flanagan 的“JavaScript - the Definitive Guide”一书(我也在 O'Reilly Answers 上问过这个问题),或者其他任何地方,但我发现 window.onunload除非文档完全加载,否则不会调用,这很烦人!至少对于 IE8 和 Chrome 3 来说是这样

我有一段 Javascript 想要添加到网页底部。如果用户碰巧在页面加载之前点击了页面(^ 见下文),并且在我的 Javascript 有机会运行之前,我希望将其捕获在 onunload 中。但这是不可能的,因为只有在文档完全加载时才会调用 onunload 事件处理程序。如果我不能使用 onunload,还有什么我可以用它来达到同样的效果吗?

^ “Javascript - The Definitive Guide”建议用户与页面的交互在页面加载之前不会发生。我相信这是错误的。这本书是这样说的:

) 如果这样的事件处理程序试图操作文档中尚未解析的部分,它将失败。这种情况在实践中并不常见,通常不值得为积极防范这种情况而付出额外的编码努力。”(第 5 版,第 256 页)

我在 IE8 上进行了测试,表明可以在页面加载的任何阶段与页面交互(并通过锚链接离开)。

感谢您的帮助,保罗

4

1 回答 1

0

对我来说,在解析文档之前无法触发 onunload 事件是有道理的。文档解析和脚本执行通常在同一个线程上运行,如果用户要离开页面,则该线程将在onunload事件触发后被取消。由于在用户离开页面时解析正在使用线程,因此浏览器将具有以下选项:

  • 完成解析并触发 unload 事件——这会延迟导航到下一页,所以这不是一个真正可行的选择。
  • 取消解析并触发 unload 事件 - 这是一个更可行的选择,但您可能会看到一些 UA 没有打扰。
  • 只需停止线程并导航到下一页 - 这似乎是您在 IE 和 Chrome 中发生的事情

也许您可以查看是否触发了onbeforeunload事件?我不认为这会有所作为。我认为最好的办法是研究可以优化页面以加快加载速度的方法。

于 2010-02-03T17:18:09.040 回答