我正在使用脚本标记长轮询技术实现Comet,基于this page。
一个问题(我认为没有解决方案)是“厄运的悸动” - 浏览器继续将文档显示为“正在加载”并启用工具栏上的“停止”按钮。这种方式很有意义,因为文档 仍在加载,虽然它并不理想,但我认为我可以忍受它。
第二个问题是,如果用户实际单击停止,则浏览器停止加载我的脚本标记,我必须依赖超时来重启Comet。这意味着如果我的超时是20秒,则在用户单击“停止”后,该页面最多可能不会更新20秒。我的问题是:有没有办法检测他们什么时候这样做?我可以使用 onkeydown 事件检测他们何时按下转义,但是如果他们使用工具栏按钮或菜单项停止加载则不会。
该解决方案需要在Firefox 3.5和Chrome 3.0中运行。
答案 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);
}
});