Handle 浏览器返回按钮
单元测试:
- 自己的每个页面都有 state // 没有的话 replace 添加
- 打开 modal 不会改变 url,不会被复制在新上下文中打开 // pushState
- 打开 modal 添加 close 回调 // 刷新时有 close 标记但是没有回调应该 back
- 关闭 modal 之前执行 closeBefore,返回为 false 时需要 forward
- 页面跳转时有 close 应该先 back 执行 close 回调再进行跳转
- 不能影响返回键退出 App
- modal 中切换页面 // 可以只支持 1 级
- 多级 modal 中刷新 // 可以只支持 2 级
history.foward() 触发的 popstate 是可信的
注: chrome history.foward 是异步修改 history 的,异步触发 popstate, 所以在连续操作 history 时中间要设置间隔时间 // 但是是同步修改的 location
```js
history.pushState('/', {}, '')
let flag = false
window.addEventListener('popstate', () => {
console.log({ flag })
})
flag = true
history.back();
queueMicrotask(() => flag = false)
```