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

时间:2009-11-25 01:06:28

标签: javascript ajax events comet

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

一个问题(我认为没有解决方案)是“厄运的悸动” - 浏览器继续将文档显示为“正在加载”并启用工具栏上的“停止”按钮。这种方式很有意义,因为文档 仍在加载,虽然它并不理想,但我认为我可以忍受它。

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

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

3 个答案:

答案 0 :(得分:0)

几天前我问过同样的 a very similar question,一般的概念都没有。

答案 1 :(得分:0)

看起来 DOMContentLoaded 事件在Firefox 3.5中起作用 - 它是在用户第一次停止加载页面时触发的。之后,停止按钮被禁用。用户仍然可以按Escape停止再次加载 ,但我可以使用 onkeydown 检测到。

但是,这在Chrome中不起作用 - 它会在页面加载后立即触发DOMContentLoaded,而不会等待我动态生成的<script>标记。

答案 2 :(得分:0)

是的,可以!

当使用停止加载页面时,这些不是直接的dom API来帮助您触发事件。 但是,您可以在两个事件的帮助下检测到它:

1。window的加载事件。

2。文档的readystatechange事件。

当页面正常加载时,

chrome将同时触发load和readystatechange事件。 当用户停止加载时,chrome会触发readystatechange事件,但是,加载事件将被忽略。

这是示例代码:

        var isLoaded = false;
        window.addEventListener("load", function () {
            isLoaded = true;
        });
        document.addEventListener("readystatechange", function () {
            if (document.readyState == "complete") {
                setTimeout(function() {
                    if (!isLoaded) {
                        console.log("abort");//HERE
                    }
                },100);
            }
        });