一个更好的解决方案,可以在所有浏览器和平台上抓住浏览器的后退按钮

A better solution to catch the back button of browser across all browser and platform

本文关键字:浏览器 和平台 按钮 一个 更好 解决方案      更新时间:2023-09-26

我想在页面发生任何事情之前抓住浏览器返回按钮。我已经研究了很多解决方案,有些在上一页完全加载时捕捉到这个事件,我不需要。我需要在任何事情发生之前抓住它。我找到了另一个好的解决方案,

$(window).on('popstate', function() {
  var hashLocation = location.hash;
  var hashSplit = hashLocation.split("#!/");
  var hashName = hashSplit[1];
  if (hashName !== '') {
    var hash = window.location.hash;
    if (hash === '') {
        alert('Back button was pressed.');
    }
  }
});
window.history.pushState('forward', null, '#b');
}

非常有效的解决方案,这个catch-back按钮事件甚至在页面发生任何事情之前,但这个用我的URL写#b,这是不可接受的。
需要帮助,以便在页面发生任何事情之前捕获任何浏览器返回按钮

事实上,我的完整故事是,当按下back时,我在cookie中存储一个变量。很快脚本第一次点击页面加载,我检查cookie,然后重新加载整个页面。因此,服务器端是调用生成的,而不是缓存。有其他解决方案吗?

我一直在寻找一个解决方案,但还没有找到有效的解决方案。提前谢谢。

终于找到了我想要的解决方案。我需要处理后退按钮,因为我不想从缓存加载页面。我无法停止缓存,因为我希望浏览器缓存CSS和jquery,但不缓存html。到目前为止,我认为停止只缓存HTML是不可能的

所以我找到了一个解决方案,我在服务器端添加了一个cookie RequestedFrmServer。每次我在服务器上的代码被命中时(或者当生成服务器端请求时),都将其设置为1,很快我的客户端脚本被命中,我只将其设置回0。我放置了一个条件,如果值为0,则重新加载整个页面

这是代码。

var _historyBack = $.cookie('RequestedFrmServer');
if (_historyBack != undefined && _historyBack == "1")
{
    setCookie("RequestedFrmServer", "0");
}
else if(_historyBack != undefined && _historyBack == "0")
{
    window.location.reload(true);
}

在我的案例中起了作用。如果为你工作,我应该受到表扬