为何两段书签代码在谷歌Chrome浏览器中对历史记录的影响存在差异?
为何两段书签代码在谷歌Chrome浏览器中对历史记录的影响存在差异?
嘿,这事儿其实跟Chrome处理页面跳转的逻辑直接相关,咱们拆开来看就明白啦:
首先看第一段书签代码:
data:text/html,<script>fetch('https://www.example.com/').then(r=>r.text()).catch(e=>console.log(e)).then(t=>location.href='https://www.example.com/').catch(e=>console.log(e))</script>
这段代码里,前面的fetch只是在后台悄悄请求目标页面的内容,完全不会影响浏览器历史。真正起作用的是最后那句location.href='https://www.example.com/'——这就跟你手动在地址栏输网址、点击链接跳转一样,属于正常的主动导航行为。Chrome会把这次跳转当成用户发起的新请求,自然会在历史记录里新增一条条目。
再看第二段书签代码(虽然你贴的内容没写完,但从结果反推核心逻辑):
data:text/html,<script>fetch('https://ww...
它之所以不会新增历史记录,大概率是用了和第一段不同的跳转方式。比如如果它用的是location.replace('https://www.example.com/'),Chrome就会用新页面替换掉当前书签页的历史记录条目,而不是在历史栈里新增一条。相当于直接“覆盖”了当前的历史位置,自然就不会多出一条新记录啦。
简单总结下:
location.href触发的是新增式导航,会给历史记录加新条目location.replace触发的是替换式导航,不会新增历史记录
这就是两段代码对Chrome历史记录影响不同的关键原因。
内容来源于stack exchange
相关产品推荐
相关产品推荐

