求大佬帮我看下前端代码, history 历史上一页问题

42 天前
 DreamCMS
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button id='aaa' style="font-size:80px;padding:50px;" onclick="pushHistory('home2222')">21122121212</button>

<script>
function pushHistory(e) {
var state = {
title: "title",
url: "#"+e
};
window.history.pushState(state, "title", "#"+e);
}

setTimeout(function() {

// $('#aaa').click();

}, 1800);
</script>

浏览器打开,点击按钮,url 增加#home2222 ,如果点后退正常,退到打开的上一页
但如果打开定时的 aaa 自动点击,URL 等待 1.8 秒可以加上#home2222 但后退与上面不正常,退出去了。
1124 次点击
所在节点    前端开发
13 条回复
laobobo
42 天前
惭愧啊 7 年前端的我也以为是一样的,问了下 ai , 两者还是有区别的,手动点击会记录到浏览器中,而 js 方式不会
laobobo
42 天前
@laobobo 更正一下,貌似 firfox 没事,有可能是 chrome 自己的行为
yohane3016
42 天前
然而 Chrome 124 和 firefox 124 试了都正常后退,区别在于 chrome 要点击一次页面才会更新更新前进后退按钮的状态,firefox 是在 state 发生变动时就更新前进后退按钮的状态
DreamCMS
42 天前
@laobobo 对 Chrome 会这样,所以安卓机器也这样
DreamCMS
42 天前
@yohane3016 安卓机器不行 大部分内核还是老的
laobobo
42 天前
yohane3016
42 天前
@laobobo #6 确实应该设计如此,手机上试了好几个浏览器都是 pushState 后手动点一下屏幕就能正确返回的
NoManPlay
42 天前
模拟点击不会触发 popstate 事件
```js
window.addEventListener('popstate', function(event) {
if (event.state) {
console.log("Page was loaded: ", event.state.page);
// 根据 event.state 更新页面内容
}
});
```
southlink
42 天前
在 chrome 中,要有用户操作,插入的历史记录才会被激活,应该是为了防止有网页恶意插入历史记录不让用户返回。可以看看这个: https://html.spec.whatwg.org/multipage/interaction.html#history-action-activation
DreamCMS
42 天前
@NoManPlay 问题我是直接打开这个页面 在自动点击 后退大退了 没法监听
tanranran
42 天前
看了楼上的回答,涨知识了
CHTuring
42 天前
这个在移动端的 H5 活动页是很常见的,所以 H5 点全局返回按钮需要加上判断事件

```
if (document.referrer) {
// 返回上一页
} else {
// 返回首页
}
```
shizhibuyu2023
42 天前
你问的问题我不知道,但是改 hash 为啥不用 a 标签或者直接改 window.location.hash?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1036646

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX