10

我很好奇是否有一种方法可以检测用户使用 javascript(或者更好的是 jQuery)在浏览器中按下“停止导航”按钮。例如,如果您单击需要一段时间才能加载的网页的链接,您可能想展示一个旋转的装载机。但是如果用户取消导航到页面怎么办?有没有办法检测到摆脱你放置的旋转装载机?

编辑:我做了更多的研究,在 javascript 中似乎有一个 onStop 事件,但是,你不知道吗,它只适用于 internet explorer。如果有人有任何其他想法来实现像 onStop 这样的跨浏览器解决方案,那就太好了,但如果没有,我会在几天内回答我自己的问题以结束这个问题。

编辑 2https ://stackoverflow.com/a/16216193说这是不可能的。和其他一些答案一样。

4

1 回答 1

1

好吧,正如承诺的那样,我将回答我自己的问题。

我已经考虑了很多 - 我想出了一个解决方案。我无法让它在代码中工作(我没有太努力),但它应该在理论上工作。

所以我想到了决定一个网页何时应该决定停止被调用的标准。我想出了这个:

  • 如果脚本在一段合理的时间后没有终止,则可以假定导航已被取消。

然后可以在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。如果我们有一张永远不会加载的图片,并且用户按下停止,会onAbort被解雇吗?即使正在加载另一个网页?它需要测试,但这也可能有效。不过,我更喜欢我的第一个想法。虽然不稳定,但它比这个 cockamamie 想法更稳定,我意识到这可能是不好的做法。

于 2013-07-24T19:20:11.477 回答