我正在尝试使用"pushState"和"popstate"事件来捕获后退按钮导航,然而,在Firefox中,popstate事件能够正确触发,但在Chrome中(版本76.0.3809.87(官方构建)(64位))如果没有用户交互,则不能触发。
经过测试,似乎只有当用户与页面交互时(即点击文档上的某个地方)才会触发popstate事件。因此,如果您加载页面而没有进行交互并单击后退按钮,则不会调用popstate功能。
我添加了一个Fiddle来展示这一点:https://jsfiddle.net/0xwvLndu/
要在Chrome中测试Fiddle,只需单击链接并单击后退按钮。你将看不到警报。然后再次单击链接,但这次请单击Fiddle文档中的任何位置,然后单击后退按钮,警报将被触发。
我在Chromium论坛上找到了一些讨论,可能与这种怪异现象有关,也许是为了防止历史条目被滥用而实施的 - https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/OCS7g72HtyI和https://github.com/WICG/interventions/issues/21#issuecomment-425609246
如果是这样的话,是否意味着不能再依赖popstate来捕获后退按钮动作,如果是这样,是否有解决方法?
以下是我一直在测试的示例:
window.addEventListener('load', function() {
history.pushState(null, null, document.URL);
});
window.addEventListener('popstate', function(event) {
alert('test');
});
我期望警报被触发时无论用户是否交互都会返回上一页,但在Chrome中这并没有发生。