繁体   English   中英

如何使用 JavaScript 阻止浏览器对退格按钮的默认历史后退操作?

[英]How can I prevent the browser's default history back action for the backspace button with JavaScript?

有没有办法防止用户在浏览器中按退格键时发生默认操作?

我不需要阻止用户离开,只需使用默认的退格操作即可。 我需要退格来做一些不同的事情(这是一个游戏)。

我试过没有成功:

window.addEventListener('keydown', function(e) {
    if (e.keyCode === Game.Key.BACK_SPACE)
    {
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
}, false);

如果我在 if 中放置一个警报,则将在按下退格键时显示警报。 所以,keyCode 是正确的。

这必须适用于 Opera 10.6、Firefox 4、Chrome 6、Internet Explorer 9 和 Safari 5。

您不需要return falsee.stopPropagation() 两者都不会对附加有addEventListener的侦听器产生任何影响。 您的代码在 Opera 中不起作用,它只允许您在keypress事件或不支持addEventListener IE <= 8 中抑制默认浏览器行为。 只要您在document上还没有keydownkeypress事件处理程序,以下内容应该适用于所有浏览器。

编辑:它现在还过滤掉源自<input><textarea>元素的事件:

function suppressBackspace(evt) {
    evt = evt || window.event;
    var target = evt.target || evt.srcElement;

    if (evt.keyCode == 8 && !/input|textarea/i.test(target.nodeName)) {
        return false;
    }
}

document.onkeydown = suppressBackspace;
document.onkeypress = suppressBackspace;

如果您更喜欢简单地为自己修复,而不在编写网页脚本时影响其他用户,请阅读以下内容。

以下是一些仅更改您使用的浏览器的解决方案:
- Linux 上的 Firefox 自 2006 年以来“取消映射”退格行为,因此不受影响; (无论如何,它只是在此之前设置为向上滚动)
- Chrome 刚刚宣布将从现在开始做同样的事情; http://forums.theregister.co.uk/forum/1/2016/05/20/chrome_deletes_backspace/
- 通过进入 about:config 并将 backspace_action 设置更改为 2,可以将 Windows 上的 Firefox 设置为忽略退格; ( http://kb.mozillazine.org/Browser.backspace_action )
- 野生动物园?!

我在 Telerik 的页面脚本中发现可以使用。 脚本阻止后退按钮操作:通过单击浏览器后退按钮和页面上的退格。 这个脚本有效。 我在我的项目中使用它。 http://www.telerik.com/community/code-library/aspnet-ajax/general/disable-backspace-from-master-page.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM