多页面网站禁用浏览器退却键

如题目所说,本文供应的要领实用于多页面网站,如SPA单页面运用等不实用。

应用window.onpopstate和window.history.pushState 掌握浏览器退却键失效,下面说一下怎样完成。

1.在你须要制止浏览器退却键的页面上加上下面的代码:

<script>
$(document).ready(function(){
  //推断当前浏览器是不是支撑history和pushState,据我测试当前大部分浏览器都支撑
  if(window.history && window.history.pushState){
    window.history.pushState({},null,location.href);
  }
});
</script>

当你加上上面的代码时,你发明当你点击一次浏览器的退却键,页面并没有退却,你能够觉得好像是解决题目了,然则当你再次点击退却键时页面照样返回到上一页面。

原因是window.history.pushState()要领是向浏览器汗青增添了一个状况,它有三个参数分别是,一个状况对象(实在就是页面的参数),一个题目(如今被忽略了),以及一个可选的URL地点。

当你在页面上写了window.history.pushState({},null,location.href);浏览器会在history中增添location.href,同时页面并不跳转,但你只加了一次,所以只对一次退却事宜起作用。怎样彻底解决这个题目呢?还须要在全局增添onpopstate事宜,概况请看第2步。

2.在全局增添一个onpopstate事宜,这里我用的是匿名函数(固然也能够直接写):

;(function(window,undefined){
  'use strict'
  //推断当前浏览器是不是支撑history和pushState,据我测试当前大部分浏览器都支撑
  if(window.history && window.history.pushState)
  {
    window.onpopstate = function(){
      window.history.pushState({},null,"");
      //window.history.forward(1);  这句我没明白什么意义,不加也能够完成,所以解释掉了
    }
  }
})(window);

这时候你发明,在你的目的页面上点击浏览器回退键页面不会跳转了,题目解决。然则上面的代码是什么意义呢?

window.onpopstate事宜会监听浏览器的退却、行进按钮(或许在JavaScript代码中挪用相似history.back()、history.forward()、history.go()要领),然则挪用像 history.pushState() 或许history.replaceState() 不会触发popstate事宜。

所以我们在全局中增添popstate监听事宜,一但用户点击退却按钮时就会触发这个要领,该要领会再次向histroy中增添一个链接,防备用户再一次点击退却按钮。

    原文作者:hellowoody
    原文地址: https://segmentfault.com/a/1190000013338702
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞