在 MVC 4 和浏览器后退按钮的视图中禁用退格

Posted

技术标签:

【中文标题】在 MVC 4 和浏览器后退按钮的视图中禁用退格【英文标题】:Disabling Backspace in a view in MVC 4 and browser back button 【发布时间】:2016-05-22 01:12:38 【问题描述】:

我想创建一个页面(在本例中为view),如果按下退格键,将显示错误。

这是我对退格键的尝试:

<script type ="text/javascript">
$(document).ready(function (event) 
    if (event.keycode == 8) 
        alert("Don't go back");
        window.history.back(0);
    
);

</script>

它不工作,

另外,我想抓住浏览器的后退按钮,这样我就可以禁用返回页面。

任何替代方案都会被接受,因为它会拯救我的一天。

提前致谢。

【问题讨论】:

How to capture a backspace on the onkeydown event的可能重复 【参考方案1】:

您通常不能(浏览器安全限制)。您可以判断用户是否离开页面(onbeforeunload、onunload fire),但您无法判断他们去了哪里,除非您已将页面设置为允许。

html5 引入了 HTML5 History API;在符合标准的浏览器中,如果用户导航回您网站上较早的“页面”,onpopstate 事件将触发。

if (window.history && window.history.pushState) 

    $(window).on('popstate', function() 
      var hashLocation = location.hash;
      var hashSplit = hashLocation.split("#!/");
      var hashName = hashSplit[1];

      if (hashName !== '') 
        var hash = window.location.hash;
        if (hash === '') 
          alert('Back button was pressed.');
        
      
    );

    window.history.pushState('forward', null, './#forward');
  

【讨论】:

它被阻止了一次。我想在它点击返回按钮时阻止它@Abbas【参考方案2】:

在按键事件中绑定

    $(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.type.toUpperCase() === 'SEARCH' || 
                 d.type.toUpperCase() === 'EMAIL' || 
                 d.type.toUpperCase() === 'NUMBER' || 
                 d.type.toUpperCase() === 'DATE' )
             ) || 
             d.tagName.toUpperCase() === 'TEXTAREA') 
            doPrevent = d.readOnly || d.disabled;
        
        else 
            doPrevent = true;
        
    

    if (doPrevent) 
        event.preventDefault();
    
);

【讨论】:

以上是关于在 MVC 4 和浏览器后退按钮的视图中禁用退格的主要内容,如果未能解决你的问题,请参考以下文章

在基于导航控制器的应用程序的最终视图中隐藏或禁用后退按钮

如何在Angular 2中禁用浏览器后退按钮

如何用jQuery禁用浏览器的前进后退按钮

JS如何禁用浏览器的退格键

使用jquery在浏览器中禁用后退按钮?

如何使用javascript禁用后退和前进按钮