一图让你明白浏览记录window.history的规则和坑

296 阅读1分钟

前言

之前写的网页需要嵌入到webview中,android中原生有canBack方法可以直接判断,所以功能一直很正常;这次嵌入到别的app中,并且js调用了pushState方法导致功能异常,于是就特地查阅了一番。

浏览器原理

下面会模拟一些操作,你会很直观的理解浏览器的行为。

image.png

注意:history的replaceState和pushState只是改变了历史记录和浏览器的地址栏,并不会加载页面,就像图中url1被替换成了url4,但界面显示的还是url1;如果希望切换路由并且页面页加载使用location.replace和location.href,history的结果是一样的。所以step1、2、3的跳转可以是pushState或location.href,主要看你要不要地址栏和显示一致

无关紧要的点

  1. chrome打开新的标签页就已经有一条记录了,是一个内置推荐页chrome://new-tab-page-third-party/ ,其他浏览器应该也是一样的(未验证),这个推荐页用户可以在设置里修改的。
  2. 浏览器输入网址和location.href跳转效果是一样的,每次输入都会增加一条记录。
  3. location.href、location.replace对应的就是vue里的router.pushrouter.push、router.replace