【问题标题】:Disable browsers' back button, completely完全禁用浏览器的后退按钮
【发布时间】:2017-06-14 19:19:30
【问题描述】:

需要完全阻止用户转到上一页。

当我使用以下代码时,它可以工作,但这并不是我所需要的。当按下返回按钮时,它会显示“文档已过期”:

Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

另一个想法——打开一个没有工具栏的新窗口:

<script>
    function PopupWithoutToolbar(link) {
        var w = window.open(link.href,
            link.target || "_blank",
            'menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizable=no,dependent,width=800,height=620,left=0,top=0');
        return w ? false : true;
    }
</script>

<a href="http://www.google.com" onclick="return PopupWithoutToolbar(this)">yahoo</a>

但是,仍然...如果用户按下键盘上的退格键,他可以返回。似乎这种方法仅用于隐藏而不是禁用按钮。

有什么方法可以简单地忽略后退按钮?

【问题讨论】:

  • 您可能需要重新考虑这样做。后退按钮是浏览器最基本和众所周知的功能之一(连我奶奶都知道)。禁用它或更改它的功能会导致糟糕的用户体验,因为用户可能会认为他们的浏览器崩溃或他们的鼠标被破坏,因为某些事情会(不会)发生并且一直有效。

标签: javascript asp.net webforms


【解决方案1】:

我不完全确定这是否可行,但您可以尝试使用 javascript 处理该事件。

如果你想完全禁用退格按钮允许用户返回,你可以这样做

$(window).on("keypress", function (e){
    if(e.keycode == "backspace") 
         e.preventDefault();
})

我可以为您找出退格键的键码,但这并不难找出。这也使用 jquery,但您可以只使用原始 javascript。只是不确定它会是什么。

【讨论】:

    【解决方案2】:

    我正在使用稍微不同的解决方案:

    history.pushState(null, null, location.href);
    window.onpopstate = function () {
        history.go(1);
    }
    

    【讨论】:

      【解决方案3】:

      根据您的帖子,您唯一的问题是禁用退格按钮以防止用户返回。

      这就是我使用 jquery 所做的。仍然允许退格键在启用的文本编辑输入中起作用。

          // Prevent the backspace key from navigating back.
          $(document).unbind('keydown').bind('keydown', function (event) {
              var doPrevent = false;
              if (event.keyCode === 8) {
                  var d = event.srcElement || event.target;
                  if ((d.tagName.toUpperCase() === 'INPUT' && (d.type.toUpperCase() === 'TEXT' ||
                                                               d.type.toUpperCase() === 'PASSWORD' ||
                                                               d.type.toUpperCase() === 'FILE')) ||
                                                               d.tagName.toUpperCase() === 'TEXTAREA') {
                      doPrevent = d.readOnly || d.disabled;
                  }
                  else {
                      doPrevent = true;
                  }
              }
      
              if (doPrevent) {
                  event.preventDefault();
              }
          });
      

      【讨论】:

        【解决方案4】:

        最简单的事情:

        window.onhashchange = function (event) {
         //blah blah blah
         event.preventDefault();
         return false;
        }
        

        您可以从该 (window.location) 处理位置域等,然后在这种情况下如果需要取消事件。

        How to Detect Browser Back Button event - Cross Browser

        【讨论】:

          【解决方案5】:

          要禁用浏览器中的后退按钮,您可以在要禁用后退按钮的页面上的 JavaScript 中使用以下代码。

          <script>
          history.pushState(null, null, location.href);
              window.onpopstate = function () {
                  history.go(1);
              };
          </script>
          

          【讨论】:

            猜你喜欢
            • 2011-08-06
            • 2010-10-31
            • 2014-04-17
            • 1970-01-01
            • 1970-01-01
            • 2018-01-25
            • 2011-04-06
            相关资源
            最近更新 更多