提问人:Rinato 提问时间:11/11/2022 更新时间:11/11/2022 访问量:176
为什么在 Safari 16.* 和 Chrome 107.0.5304 中使用内置浏览器后退按钮时 history.pushState() 没有得到尊重?
Why does history.pushState() not get respected when using the built in browser back button in Safari 16.* and Chrome 107.0.5304?
问:
我发现,在这些版本的 Safari 和 Chrome 中,在没有用户输入的情况下将新的状态值推送到浏览器历史记录中会出乎意料。它将正确更新状态。您将能够使用浏览器 API 与该更新状态进行交互。您将能够使用 cmd + 左右的 MacOS 快捷方式在历史记录中向前和向后导航。history
您将无法点击浏览器的“后退”按钮并让它返回到您加载的页面的初始 URL。长按“返回”按钮时,您将看到正确的历史记录。您将能够正确呼叫。hsitory.back()
一个简单的示例片段:
<!DOCTYPE html>
<html>
<body>
<script>
window.history.pushState({a:1 }, '', window.location.pathname + "?page=1");
</script>
<h1>Safari History Issue</h1>
</body>
</html>
如果将此 html 加载为本地服务器上的索引文件,则可以按照以下步骤重现此问题:
- 导航到 google.com
- 导航到本地服务器
- 这应该将状态推送到 ?page=1
- 通过长按后退按钮,可以看到初始本地页面(无参数)以及谷歌现在都在您的浏览器历史记录中
- 点击浏览器上的“返回”按钮
- 这将带您一路回到谷歌,而不是回到之前的初始本地页面
pushState()
如果由于用户操作(如事件)导致此问题不存在。pushState()
onclick
我想知道这些浏览器的最新版本中是否存在一些未记录的安全更新导致此问题?
答: 暂无答案
评论