gpt4 book ai didi

JavaScript onunload 仅在文档​​完全加载时调用?

转载 作者:行者123 更新时间:2023-11-28 10:34:02 25 4
gpt4 key购买 nike

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

我有一段 Javascript 我想添加到网页底部。如果用户碰巧在页面加载之前单击关闭页面(^ 见下文),并且在我的 Javascript 有机会运行之前,我希望将其捕获在 onunload 中。但这是不可能的,因为 onunload 事件处理程序仅在文档完全加载时才会被调用。如果我无法使用 onunload,是否可以使用其他方法来实现相同的目的?

^“Javascript - 权威指南”建议在页面加载之前用户无法与页面进行交互。我相信这是错误的。书上是这么说的:

“Javascript执行模型中的另一个灰色地带是在文档完全加载之前是否可以调用事件处理程序的问题。到目前为止,我们对Javascript执行模型的讨论得出的结论是所有事件处理程序总是被触发所有脚本执行完毕后。虽然这种情况通常会发生,但任何标准都不需要这样做。如果文档很长或通过慢速网络连接加载,浏览器可能会部分呈现文档并允许用户开始交互在所有脚本和 onload 处理程序运行之前使用它(并触发事件处理程序)。如果这样的事件处理程序调用尚未定义的函数,它将失败。(这是在脚本中定义所有函数的原因之一)文档。)并且如果这样的事件处理程序尝试操作尚未解析的文档部分,它将失败。这种情况在实践中并不常见,并且通常不值得花费额外的编码精力来积极防范它。”(第 5 版,第 256 页)

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

感谢您的帮助,保罗

最佳答案

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

  • 完成解析并触发卸载事件 - 这会延迟导航到下一页,因此这实际上并不是一个可行的选择。
  • 取消解析并触发卸载事件 - 这是一个更可行的选项,但您可能会看到一些 UA 不打扰。
  • 只需停止线程并导航到下一页 - 这似乎就是 IE 和 Chrome 中发生的情况

也许你可以看看 onbeforeunload事件被解雇?但我认为这不会有什么不同。我认为最好的办法是寻找优化页面以加快加载速度的方法。

关于JavaScript onunload 仅在文档​​完全加载时调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com