gpt4 book ai didi

javascript - JavaScript 可以检测到用户何时停止加载文档吗?

转载 作者:数据小太阳 更新时间:2023-10-29 04:45:01 25 4
gpt4 key购买 nike

我正在使用脚本标签长轮询技术实现 Comet,基于 this page .

一个问题(我认为没有解决方案)是“厄运的悸动者”——浏览器继续将文档显示为永远“正在加载”,并使工具栏上的“停止”按钮处于启用状态。这是有道理的,因为文档正在 仍在加载,虽然它并不理想,但我认为我可以接受它。

但是,第二个问题是,如果用户实际单击“停止”,则浏览器将停止加载我的脚本标记,我必须依靠超时来重新启动 Comet。这意味着如果我的超时时间是 20 秒,则在用户单击“停止”后最多 20 秒内页面可能不会更新。我的问题是:有没有办法检测他们何时这样做?我可以使用 onkeydown 事件检测他们何时按下退出键,但如果他们使用工具栏按钮或菜单项停止加载则无法检测。

该解决方案需要在 Firefox 3.5 和 Chrome 3.0 中运行。

最佳答案

正如我在评论中所建议的...在 onload 中添加脚本事件。

编辑:我想我可以解释一下我提出这个建议的原因,希望它能帮助其他试图解决同样问题的人。

浏览器将继续“加载”(并因此播放颤动器)直到它触发了 onload给定窗口或选项卡中每个“窗口”(具有全局 window 父级的每个 DOM 树)的事件。许多外部资源可以并行下载,但默认情况下 - 事实上,除了 IE1 之外的任何浏览器都无法逃避此默认值(使用 defer 标签上的 <script> 属性) )— <script>资源将“阻止”文档的进一步处理。如果<script>资源请求永远不会完成,页面的 onload事件永远不会触发(并且还有其他副作用,如果在 DOM 中的 <script> 之后有内容:DOM 可能永远不会完全加载,并且 <script> 之后的资源可能根本不会加载),因此永远不会完成“加载”。

在此基础上,您还可以通过添加初始 <script> 来提高性能在加载 DOM 时,带有 defer IE 的属性,并在您期望 onload 时切断其他浏览器的连接事件会触发(这很难准确定位,可能需要实验)。

1 为了使这个答案保持最新... defer属性是 available现在在大多数现代浏览器中。

关于javascript - JavaScript 可以检测到用户何时停止加载文档吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1794047/

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