我在这个论坛上搜索谷歌和其他一些问题,但似乎没有回答我的问题。
基于MDN https://developer.mozilla.org/en-US/docs/Web/API/window.onpopstate:
请注意,仅调用
history.pushState()
或history.replaceState()
不会触发popstate
事件。只有执行浏览器操作(例如单击后退按钮(或在JavaScript中调用popstate
)才会触发history.back()
事件。只有当用户在同一文档的两个历史记录条目之间导航时才会触发事件。
我正在寻找具有与onpopstate
(https://developer.mozilla.org/en-US/docs/Web/API/Window.onhashchange)相同功能的window.onhashchange
替代品,以便在网址更改时触发事件。
您想分享您的解决方案吗?
答案 0 :(得分:1)
我想您可能会使用“History.js”工具,该工具提供您可以收听的“状态转换”事件。当按下向前/向后按钮或使用pushState / replaceState时,该工具将触发该事件。
https://github.com/browserstate/history.js/
当然,现在你已经交换了一个不同的问题,即你有两种类型的动作被触发事件,你经常想要区分它们,这更难。所以你必须破解自己的解决方案来区分它们。大多数人似乎只要调用pushState / replaceState就设置一些全局标志,然后在事件处理程序中检查这个标志。如果设置了标志,则事件来自您自己的代码,如果没有,则来自浏览器按钮。