JavaScript 或 jQuery 浏览器后退按钮点击检测器

IT技术 javascript jquery back-button
2021-01-26 19:58:08

有人可以分享经验/代码我们如何检测浏览器后退按钮点击(对于任何类型的浏览器)?

我们需要满足所有不支持 HTML5 的浏览器

6个回答

'popstate' 事件仅在您之前推送某些内容时有效。所以你必须做这样的事情:

jQuery(document).ready(function($) {

  if (window.history && window.history.pushState) {

    window.history.pushState('forward', null, './#forward');

    $(window).on('popstate', function() {
      alert('Back button was pressed.');
    });

  }
});

对于浏览器向后兼容性,我推荐:history.js

这不区分后退或前进按钮,只是 popstate,两者都可以
2021-03-18 19:58:08
但是对后退和转发都发出警报,我如何才能检测到仅后退点击
2021-03-26 19:58:08
“'popstate' 事件仅在您之前推送某些内容时才有效。” 这是金!有很多例子,但最重要的一点是这个确切的报价!
2021-03-27 19:58:08
您的代码在桌面浏览器中完美运行。但在移动浏览器中无法正常工作
2021-04-03 19:58:08
代码对于给定的页面只工作一次。如果添加另一个“window.history.pushState('forward', null, './#forward');” 警报后,它不断阻止用户使用后退按钮......呵呵
2021-04-06 19:58:08

在 javascript 中,导航类型 2 表示点击浏览器的后退或前进按钮,浏览器实际上是从缓存中获取内容。

if(performance.navigation.type == 2) {
    //Do your code here
}
这不再有效。perfermance.navigation.type 只给出一个值 0 并且已被弃用,并且并非所有浏览器都支持它的替代方案。
2021-03-30 19:58:08
谢谢哈桑,它奏效了,这正是我正在寻找的。
2021-04-01 19:58:08
除非页眉包含“no-store”或“must-revalidate”
2021-04-10 19:58:08

有很多方法可以检测用户是否单击了“后退”按钮。但一切都取决于您的需求。尝试探索下面的链接,它们应该对您有所帮助。

检测用户是否在当前页面按下了“返回”按钮:

在上一页(“前进”)按“后退”按钮后检测当前页面是否被访问:

发现它可以很好地跨浏览器和移动back_button_override.js

(为 safari 5.0 添加了一个计时器)

// managage back button click (and backspace)
var count = 0; // needed for safari
window.onload = function () { 
    if (typeof history.pushState === "function") { 
        history.pushState("back", null, null);          
        window.onpopstate = function () { 
            history.pushState('back', null, null);              
            if(count == 1){window.location = 'your url';}
         }; 
     }
 }  
setTimeout(function(){count = 1;},200);
在 Firefox 上工作就像一个魅力,但由于某种原因它并不总是在 Chrome 上工作:/。关于如何改进它以在 Chrome 上工作的任何建议?
2021-04-11 19:58:08

在 HTML5 的情况下,这将解决问题

window.onpopstate = function() {
   alert("clicked back button");
}; history.pushState({}, '');