使用 jquery 禁用浏览器后退操作

问题描述 投票:0回答:4

我正在开发一个在线测试应用程序,要求在测试过程中,用户不能刷新页面,也不能返回,直到测试结束。我已经使用以下代码通过一切可能的方式(据我所知)成功地禁用了 jquery 中的刷新操作:

$(window).bind({
  beforeunload: function(ev) {
    ev.preventDefault();
  },
  unload: function(ev) {
    ev.preventDefault();
  }
});

但是我在禁用所有浏览器上的后退操作时遇到了麻烦,我得到的最佳解决方案与上面的代码冲突,如下所示:

window.onload = function () {
  if (typeof history.pushState === "function") {
      history.pushState("jibberish", null, null);
      //alert("Reloaded");
      window.onpopstate = function () {
          history.pushState('newjibberish', null, null);
          // Handle the back (or forward) buttons here
          // Will NOT handle refresh, use onbeforeunload forthis.
      };
  }
  else {
      var ignoreHashChange = true;
      window.onhashchange = function () {
          if (!ignoreHashChange) {
              ignoreHashChange = true;
              window.location.hash = Math.random();
              // Detect and redirect change here
              // Works in older FF and IE9
              // * it does mess with your hash symbol (anchor?) pound sign
              // delimiter on the end of the URL
          }
          else {
              ignoreHashChange = false;
          }
      };
    }
  }

上面的解决方案适合我禁用后退按钮的目的,但与上面的页面刷新预防处理程序冲突。 我不知道该怎么做,我也寻找了很长时间来解决这个问题,但还没有找到。任何帮助将不胜感激,即使采用完全不同的方法来解决问题,我也不会介意。 谢谢大家

更新

我从来没有意识到这样做违反了很多道德规则,无论如何,我已经考虑过并想出了当刷新页面或按下后退按钮(使用键盘或浏览器控件)时要做的其他事情。我想重定向到一个将结束当前考试会话的网址。我相信这是可能的,因此我认为我寻求的解决方案是找到实现这一目标的最佳方法。如果按下后退按钮或刷新按钮(使用浏览器控件和键盘),则重定向到另一个网址。

javascript jquery browser
4个回答
3
投票

我尝试了很多选择,但除了这个之外没有一个有效-

//Diable Browser back in all Browsers
if (history.pushState != undefined) {
history.pushState(null, null, location.href);
}
history.back();
history.forward();
window.onpopstate = function () {
history.go(1);
};

1
投票

关于我在问题中发布的更新,我已经能够解决我的问题。这就是我所做的(只需稍微修改现有代码并删除最初的 window.onload 侦听器):

$(window).bind({
  beforeunload: function(ev) {
    window.location.replace("my_url_goes_in_here");
  },
  unload: function(ev) {
    window.location.replace("my_url_goes_in_here");
  }
});

此构造适用于以任何方式完成的页面刷新和后退操作(使用键盘或浏览器控件来执行其中任何一个操作)。

但是,除了 Firefox 47.0 之外,我还没有在任何其他浏览器中进行过测试,但我很高兴它现在仍然可以工作。 感谢您的所有评论,它们非常有帮助


0
投票

就我而言,我想在 Chrome 浏览器中禁用后退单击。我尝试了很多方法,最后我从https://www.geeksforgeeks.org/how-to-disable-browser-back-button-using-jquery/

得到了
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script> 
    $(document).ready(function() { 
        function disableBack() { 
            window.history.forward() 
        } 
        window.onload = disableBack(); 
        window.onpageshow = function(e) { 
            if (e.persisted) 
                disableBack(); 
        } 
    }); 
</script> 

-1
投票

如果您有两个页面 page1 和 page2 并且(page1 重定向到 page2)并且您想限制用户返回 page1,则使用 javascript,只需将此代码放在 page1 即可。

 <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
        $(document).ready(function () {
            function disableBack() {
                window.history.forward()
            }

            window.onload = disableBack();
            window.onpageshow = function (evt) {
                if (evt.persisted)
                    disableBack()
            }
        });
    </script>
© www.soinside.com 2019 - 2024. All rights reserved.