Osm*_*USA 7 javascript browser jquery
我很好奇是否有办法检测用户使用javascript(或者更好的是,jQuery)按下浏览器中的"停止导航"按钮.例如,如果你点击网页链接需要一段时间来加载,您可能想要显示旋转装载机.但是如果用户取消导航到页面怎么办?反正有没有检测到摆脱你放的旋转装载机?
编辑:我做了一些研究,似乎在javascript中有一个onStop事件,但是,你不知道它,它只适用于Internet Explorer.如果有人有任何其他想法来实现像onStop这样的跨浏览器解决方案,那就太棒了,但如果没有,我会在几天后回答我自己的问题来关闭它.
编辑2:https://stackoverflow.com/a/16216193说这是不可能的.正如其他一些答案一样.
好吧,正如所承诺的,我将回答我自己的问题。
我对这个问题思考了很多——并且想出了一个解决方案。我无法让它在代码中工作(我没有太努力),但理论上它应该可以工作。
因此,我考虑了决定网页何时应决定调用停止的标准。我想出了这个:
body然后可以在或类似的事件上触发 jQuery 事件。但什么才算“合理的时间”呢?我认为这将部分基于页面渲染时间(获取图像等)来了解用户的互联网速度。这可以通过执行以下操作来获得:
var start = new Date();
var time;
$("body").load(function () {
time = new Date() - start;
...
});
Run Code Online (Sandbox Code Playgroud)
将其乘以一个系数(可能是 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.
}
Run Code Online (Sandbox Code Playgroud)
认为。这就是我们在这里所做的一切。我们的互联网连接可能不稳定,前一分钟很快,下一分钟就慢了。服务器负载也可能不一致。也许它像忍者一样为本页面提供图像,但下一个页面会遇到一堆请求,使其生成/提供下一页的速度慢一些。所以我们只是假设有什么东西以某种方式中断了导航,但我们不确定。
现在,当然,这可以与 IE 的onStop事件结合使用,但这确实是我能想到的唯一跨浏览器解决方案。我无法让它工作,但也许某些 jQuery 大神将来可以做到。
发帖前编辑:甚至在我发帖之前,我就有了另一个想法。更多浏览器支持onAbort。如果我们有一张永远不会加载的图片,并且用户按下停止,会onAbort被解雇吗?即使正在加载另一个网页?它需要测试,但这也可能有效。不过我更喜欢我的第一个想法。虽然不稳定,但它比这个愚蠢的想法更稳定,我意识到这可能是不好的做法。