Sivo 悉见

js监听浏览器后退事件

匿名 · 更新于 2017/10/14

最近需求需要,需在浏览器(web 和 h5手机端)实现回退弹框

网上很少找到这个需求,找到的也是有bug的,最后解决了,分享一下问题和解决方案

用到的函数:window.history.pushState

网上有个方法测试了一下:

[javascript] view plain copy
 
  1. $(document).ready(function(e) {   
  2.             var counter = 0;  
  3.             if (window.history && window.history.pushState) {  
  4.                              $(window).on('popstate'function () {  
  5.                                             window.history.pushState('forward'null'#');  
  6.                                             window.history.forward(1);  
  7.                                           alert("不可回退");  
  8.                                 });  
  9.               }  
  10.   
  11.               window.history.pushState('forward'null'#'); //在IE中必须得有这两行  
  12.               window.history.forward(1);  
  13. });  

 

有一个bug就是手机上面不能正常的弹框

在网上找了一下问题,分享文章:popstate事件在webkit中的诡异行为

解决方法:设置了一个siteTimeout,本人刚测试的时候,设置了一个setTimeout=1也不知道为什么还是无效,于是把时间改成了1000,可以正常弹框了.(不过是为什么会有这个原因,具体还没有查到,因为有的设置1是可以正常弹框了,有知道为什么的可以告知一下)

我的解决方案的js:

[javascript] view plain copy
 
  1. "pushState" in window.history && (  
  2.         window.history.pushState({  
  3.             title: document.title,  
  4.             url: location.href  
  5.         }, document.title, location.href),  
  6.             setTimeout(function () {  
  7.                 window.addEventListener("popstate"function (a) {  
  8.                     var is_guest = <?php echo $is_guest;?>;  
  9.                     if (is_guest == 1) {  
  10.                         $('.pop_UpLevel').show(); //弹框的需求  
  11.                     } else {  
  12.                         $('.pop_more').show();  
  13.                     }  
  14.                     return false;  
  15.                 })  
  16.             }, 1000)  
  17.     );  
问题:用这个方法,就是每次点击别的弹框,也会出现后退的这个弹框的需求(本人未解决,所以用了一个比较笨的方法,就是每次别的样式的弹框都对退后的弹框hide,有点笨,但是解决了问题)

 

嘻嘻,如果有上面2个问题的解决方案的牛牛,也告知一下我,互相学习一下,谢谢啦~~~~~~