一尘不染

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

ajax

我正在基于此页面使用脚本标签长轮询技术实现Comet 。

一个问题(我认为没有解决方案)是“厄运的th子”-浏览器继续将文档永远显示为“正在加载”,并使工具栏上的“停止”按钮保持启用状态。这种品牌的意义,因为该文件
仍然加载,虽然它的效果并不理想,我想我可以住在一起。

但是,第二个问题是,如果用户实际单击“停止”,则浏览器将停止加载我的脚本标签,并且我必须依靠超时来重新启动Comet。这意味着,如果我的超时时间是20秒,则在用户单击“停止”后的20秒钟内,页面可能不会更新。我的问题是:有什么方法可以检测他们何时进行此操作?我可以使用
onkeydown 事件检测他们何时按下转义键,但是如果他们使用工具栏按钮或菜单项停止加载,则无法检测。

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


阅读 195

收藏
2020-07-26

共1个答案

一尘不染

正如我在评论中建议的那样…在onload事件中添加脚本。

编辑:我想我可以解释我的建议的理由,希望它可以帮助其他人尝试解决相同的问题。

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

继续进行下去,您还可以通过<script>在加载DOM时添加一个带有deferIE属性的首字母缩写,并在期望onload事件触发时切断其他浏览器的连接来提高性能(这很难查明)准确,可能需要进行实验)。

1
要使此答案保持最新状态…该defer属性现在在大多数现代浏览器中都可用

2020-07-26