我正在尝试处理window.onpopstate我的单页应用程序中的事件,但在 Google Chrome 和 Opera 中它不起作用。
这是我的简单 html 页面
<html>
<head>
<meta charset="utf-8" />
<script>
window.onpopstate = function(e) {
alert('onpopstate');
}
setTimeout(function () {
history.pushState(1, 'Hello John', '/hello/john');
}, 2000);
setTimeout(function () {
history.pushState(2, 'Hello Emily', '/hello/emily');
}, 3000);
</script>
</head>
<body></body>
</html>
当我点击浏览器的后退按钮时,我希望看到带有onpopstate
显示文本的警报。在 Safari、Firefox、Vivaldi 中,它按预期工作。在 Chrome 和 Opera 中,它从未调用过,它只是通过重新加载来转到上一页,这对我的 SPA 来说是一个糟糕的情况。
更奇怪的是我发现了一些让它发挥作用的技巧:
转到开发工具,控制台选项卡
但是,如果我在有或没有超时的页面上的脚本中执行相同的操作,则此技巧根本不起作用。因此,我发现完成工作的唯一方法是手动转到控制台并执行。console.log(history)
console.log(window)
onpopstate
console.log(history)
也许我错过了什么?任何帮助,将不胜感激。
我的环境:
macOS 11.0.1 (20B29)
Chrome 87.0.4280.67(官方版本)(x86_64)
歌剧 72.0.3815.378
解决方案:
好吧,这不是一个错误,这是一个功能!这是interact first
Chromium 的一个特性。如果用户首先以某种方式与页面交互,那么一切都会正常,否则back button
将通过重新加载返回。
例如,只需在正文中添加一些按钮并先单击它,然后尝试back
在浏览器中单击。
<body> <button onclick="alert('hello');">alert</button> </body>
慕后森
互换的青春
慕斯王
相关分类