我很好奇,是否有一种方法可以使用javascript(甚至更好的是jQuery)来检测浏览器中按下“停止导航”按钮的用户。例如,如果您单击某个网页的链接需要花费一些时间才能加载,您可能想显示一个旋转的装载机。但是,如果用户取消导航到页面怎么办?无论如何,有没有检测到可以摆脱您放置的旋转式装载机的方法?
编辑:我进行了一些研究,并且在javascript中似乎有一个onStop事件,但是,您不知道吗,它仅在Internet Explorer中有效。如果有人对实现像onStop这样的跨浏览器解决方案有任何其他想法,那将很棒,但是如果没有,我将在几天后回答我自己的问题以结束此问题。
编辑2 :https://stackoverflow.com/a/16216193说不可能。以及其他一些答案。
最佳答案
好了,按照 promise ,我将回答我自己的问题。
我已经考虑了很多-并且提出了一个解决方案。我无法使其在代码中起作用(我并没有努力尝试),但是它应该在理论上起作用。
因此,我考虑了决定何时调用网页的标准。我想出了这个:
然后可以在
body
或类似的东西上触发一个jQuery事件。但是什么构成“合理的时间”呢?我认为这将部分基于页面渲染时间(获取图像等)来了解用户互联网的速度。可以通过执行以下操作来获得:var start = new Date();
var time;
$("body").load(function () {
time = new Date() - start;
...
});
将该系数乘以一个系数(可能是3左右),可以得到一个近似的传输时间。 (必须对其进行调整,以考虑服务器生成下一页所花费的时间,具体取决于它的动态程度。)然后,使用此新发现的
time*3
编写类似以下内容的代码:$("a").click(function() { //Anything that could go to another page should filter through here
setInterval(function() {$(document).trigger("navstopped");},time*3);
}
$(document).on("navstopped") {
//Do stuff now that we assume navigation stopped.
}
假设。 这就是我们在这里所做的全部。我们的网络连接可能不一致,一分钟快,下一分钟慢。服务器负载也可能不一致。也许它在为该页面提供忍者之类的图像,但是在下一个请求中碰到了很多请求,这使得它生成/服务下一个页面的速度变慢了一点。因此,我们只是假设某种方式以某种方式打断了导航,但我们不确定。
现在,当然可以将它与IE的
onStop
事件结合使用,但这确实是我能想到的唯一的跨浏览器解决方案。我无法使其正常工作,但也许将来有些jQuery之神可以使用。在发布之前进行编辑:甚至在发布之前,我还有另一个想法。更多浏览器支持
onAbort
。如果我们有一张从未加载过的图片,并且用户按下了stop键,是否会触发onAbort
?即使另一个网页正在加载?它需要测试,但也可以工作。我更喜欢我的第一个主意。尽管不稳定,但它比这种小巧的想法更稳定,我意识到这可能是不好的做法。