javascript - 使用 Javascript 或 jQuery 检测导航中的取消

标签 javascript jquery browser

我很好奇是否有一种方法可以使用 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 你d 写这样的东西:

$("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 想法更稳定,我意识到这可能是不好的做法。

关于javascript - 使用 Javascript 或 jQuery 检测导航中的取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17793585/

相关文章:

javascript - jquery 中 val() 的作用是什么?

javascript - 递归计算出现次数

javascript - 如何更改单击的特定按钮的样式?

javascript - 设置所选单选按钮的背景颜色

javascript - Rails 的综合 ajax 页面

javascript - 将 CSS 定位从百分比转换为像素

javascript - 通过ajax发送json - 对象 - 对象

javascript - DOM 解析器 Chrome 扩展内存泄漏

browser - 确定网页可见大小的方法

javascript - 如何在黑莓浏览器上动态添加脚本元素?