• 禁止页面回退到某个页面(如避免登录成功的用户返回到登录页)


       在开发中可能会有这样的需求:在登录成功后不想让用户再返回到登录页,支付成功后不想用户再返回到支付页。

       之前开发过hybrid app流应用,他们的处理机制是,登录成功后,杀死登录页。最近在开发微信公众号,我就在想h5能不能也做到类似的效果,避免回退到不想出现的页面。单页面应用,总不能自杀,或者让组件隐藏吧,就百度了一下,还真找到了相关的api。

      HTML5为history对象添加了两个新方法,history.pushState()history.replaceState(),用来在浏览历史中添加和修改记录。var stateObj = { foo: "TEST" }; history.pushState(stateObj, "page 1", "test.html");这种方法将会使你当前的url地址变为https://i.cnblogs.com/test.html,但浏览器不会加载https://i.cnblogs.com/test.html页面,即使这个页面存在也不会加载。现在再次假设用户继续访问http://www.baidu.com,然后点击后退。这时,url地址栏将会,https://i.cnblogs.com/test.html
     history.replaceState() 用起来很像pushState(),除了replaceState()是用来修改当前的history实体而不是创建一个新的。这个方法有时会很有用,当 你需要对某些用户行为作反应而更新一个state对象或者当前history实体时,可以使用它来更新state对象或者当前history实体的url

      是不是看到这儿有点懵了,vue-router用起来会清爽一点

    • router.push(location) history中会有记录

    • router.replace(location) history中不会有记录

    • router.go(n) 在history记录中向前跳转几页或者向后几页

       router.push、 router.replace 和 router.go 跟 window.history.pushState、 window.history.replaceState 和 window.history.go好像, 实际上它们确实是效仿 window.history API 的。

      实际使用过程中

       link标签跳转时,添加:replace=true,即可以不保留历史记录跳转

       或者用

             router.replace({path: 'login',query:{})

       如果这些还不够用,router还有个钩子,beforeRouteLeave,这个是用在单独组件中的,监听组件离开当前页,包括返回键,如果用了这个钩子,不写要跳转的到的页面,连back都离不开这个页面

      按照你的需要,哪些页面不需要保存历史记录访问,哪些页面需要重写,捋一下就很清楚了,就不多说了。   

  • 相关阅读:
    [asp.net] 网页自动刷新总结
    内容页中修改母版页内容
    [asp.net] 页面传值方法小记
    [VSS2005] 源代码管理bin文件夹里的.dll总是被签出,不能同时编译解决办法
    [asp.net] 设置与获取CheckBoxList多选的值
    [转] asp.net中repeater按钮传值与分页
    [asp.net] 验证控件的属性及用法
    [asp.net] 格式化repeater字段显示
    VPS绑定中文域名方法
    M/T法测速经典解析(转)
  • 原文地址:https://www.cnblogs.com/cjh1111/p/7128104.html
Copyright © 2020-2023  润新知