【问题标题】:A better solution to catch the back button of browser across all browser and platform在所有浏览器和平台上捕获浏览器后退按钮的更好解决方案
【发布时间】:2016-11-22 17:25:51
【问题描述】:

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

$(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,这是不可接受的。
在页面发生任何事情之前,需要帮助来捕捉任何浏览器的后退按钮。

实际上,我的完整故事是,当按下返回时,我在 cookie 中存储了一个变量。很快脚本首先在页面加载时命中,我检查 cookie,然后重新加载整个页面。这样服务器端就会生成调用而不是缓存。任何替代解决方案?

我找了很长时间的解决方案,但还没有找到有效的解决方案。 提前致谢。

【问题讨论】:

  • 没有办法真正抓住它......
  • 我只想设置一个cookie,当有人按下返回按钮时,真的没有办法吗?
  • 你能在卸载时设置cookie吗?
  • 卸载被命中,当你只是重定向到另一个页面,所以没用。
  • 实际上,我的完整故事是,当按下返回时,我在 cookie 中存储了一个变量。很快脚本首先在页面加载时命中,我检查 cookie,然后重新加载整个页面。这样服务器端就会生成调用而不是缓存。任何替代解决方案?

标签: javascript jquery


【解决方案1】:

我终于找到了我正在寻找的解决方案。我需要处理后退按钮,因为我不想从缓存中加载页面。我无法停止缓存,因为我希望我的浏览器缓存 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);
}

在我的情况下工作。如果为你工作,我应该竖起大拇指。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 2017-06-29
    • 2010-09-14
    • 2012-01-14
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多