具有类似onhashchange的相同功能的JavaScript onopstate替代方案

JavaScript onpopstate alternative with same functional like onhashchange

本文关键字:JavaScript onopstate 方案 功能 onhashchange      更新时间:2023-10-19

我在谷歌上搜索过,在这个论坛上也有其他一些问题,但它似乎没有回答我的问题。

基于MDNhttps://developer.mozilla.org/en-US/docs/Web/API/window.onpopstate:

请注意,仅调用history.pushState()history.replaceState()不会触发popstate事件。popstate事件仅通过执行浏览器操作触发,例如单击后退按钮(或在JavaScript中调用history.back())。只有当用户在同一文档的两个历史记录条目之间导航时,才会触发该事件。

我正在寻找与window.onhashchange功能相同的onpopstate替代品(https://developer.mozilla.org/en-US/docs/Web/API/Window.onhashchange)当URL更改时将触发事件。

你想分享你的解决方案吗?

我认为您可能可以使用"History.js"工具,它提供了一个您可以监听的"statechange"事件。当按下向前/向后按钮或使用pushState/replaceState时,工具会触发该事件。

https://github.com/browserstate/history.js/

当然,现在你已经换了一个不同的问题,那就是你有两种类型的动作都被触发的事件,你经常想区分它们,这就更难了。所以你必须破解自己的解决方案来区分它们。大多数人似乎在准备调用pushState/replaceState时设置了一些全局标志,然后在事件处理程序中检查该标志。如果设置了标志,则事件来自您自己的代码,如果没有,则来自浏览器按钮。