有没有办法在javascript中捕获后退按钮事件?

IT技术 javascript
2021-01-20 23:28:46

当只有位置哈希更改时,有没有办法响应在javascript中点击后退按钮(或按下退格键)?也就是说,当浏览器不与服务器通信或重新加载页面时。

6个回答

使用hashchange事件:

window.addEventListener("hashchange", function(e) {
  // ...
})

如果您需要支持旧浏览器,请查看Modernizr 的 HTML5 Cross Browser Polyfills wiki 页面中hashChange事件部分

很高兴看到 StackOverflow 的答案已经在旧问题的谷歌点击率中名列前茅。这对我有用,但是在我调用的代码中存在一些问题,如果它更改,则不会让哈希更改行执行。一个很好的提示可能是最后做。
2021-03-23 23:28:46
对答案的改进很好。
2021-03-25 23:28:46
在当前浏览器中,您应该使用 onhashchange 事件msdn.microsoft.com/en-us/library/cc288209(v=vs.85).aspx
2021-03-28 23:28:46

我创建了一个可能对某些人有用解决方案只需将代码包含在您的页面上,您就可以编写自己的函数,在单击后退按钮时将调用该函数。

我已经在 IE、FF、Chrome 和 Safari 中进行了测试,并且都可以正常工作。我的解决方案基于 iframe 工作,无需不断轮询,在 IE 和 FF 中,但是,由于其他浏览器的限制,在 Safari 中使用位置哈希。

而不是仅仅提供一个链接并解释你测试过它——如果你能解释它是如何工作的以及你为什么选择走这条路,那将是非常有帮助的。
2021-03-13 23:28:46
这看起来很漂亮,并有一个推荐。其他人有什么好话要说吗?
2021-03-15 23:28:46
我不知道为什么它对我不起作用,顺便说一下,我使用了 angular,当我刚加载 js 文件时,哈希 url 开始转到 prev 和 next forerver。
2021-04-11 23:28:46

我做了一个有趣的黑客来解决这个问题,令我满意。我有一个动态加载内容的 AJAX 站点,然后修改 window.location.hash,并且我有代码在 $(document).ready() 上运行以解析散列并加载适当的部分。问题是我对用于导航的部分加载代码非常满意,但想添加一种方法来拦截浏览器的后退和前进按钮,这会更改窗口位置,但不会干扰我当前操作的页面加载例程window.location,并且以恒定的时间间隔轮询 window.location 是不可能的。

我最终做的是创建一个对象:

var pageload = {
    ignorehashchange: false,
    loadUrl: function(){
        if (pageload.ignorehashchange == false){
            //code to parse window.location.hash and load content
        };
    }
};

然后,我在我的站点脚本中添加了一行以pageload.loadUrlhashchange事件上运行该函数,如下所示:

window.addEventListener("hashchange", pageload.loadUrl, false);

然后,任何时候我想在window.location.hash不触发此页面加载例程情况下修改它,我只需在每window.location.hash =之前添加以下行:

pageload.ignorehashchange = true;

然后在每个哈希修改行之后添加以下行:

setTimeout(function(){pageload.ignorehashchange = false;}, 100);

所以现在我的部分加载例程通常正在运行,但如果用户点击“后退”或“前进”按钮,新位置将被解析并加载适当的部分。

查看history.js有一个 html 5 statechange 事件,您可以收听它。

onLocationChange也可能有用。不确定这是否是 Mozilla 独有的东西,看起来可能是。