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

EMP*_*EMP 7 javascript ajax events comet

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

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

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

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

eye*_*ess 5

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

编辑:我想我可以解释我对该建议的推理,希望它能帮助其他人试图保存同样的问题.

浏览器将继续"加载"(从而播放throbber),直到它在给定窗口或选项卡中onload为每个"窗口"(具有全局window父级的每个DOM树)触发事件.许多外部资源能够并行下载,但默认情况下 - 事实上,除了IE 1(使用标签defer上的属性<script>)之外,在任何浏览器中都没有转义此默认值- <script>资源将"阻止"文档的进一步处理.如果<script>资源请求永远不会完成,那么页面的onload事件永远不会触发(并且还有其他副作用,如果<script>在DOM 之后有内容:DOM可能永远不会被完全加载,之后的资源<script>可能永远不会加载) ,因此永远不会完成"加载".

继续这样做,您也可以通过<script>在加载DOM时添加初始值,使用deferIE 的属性,以及在您预期onload事件发生时切断其他浏览器的连接来提高性能(这很难确定)确切地说可能需要实验).

1要使此答案保持最新... 现在大多数现代浏览器defer可以使用该属性.