[英]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 false
或e.stopPropagation()
; 两者都不会对附加有addEventListener
的侦听器产生任何影响。 您的代码在 Opera 中不起作用,它只允许您在keypress
事件或不支持addEventListener
IE <= 8 中抑制默认浏览器行为。 只要您在document
上还没有keydown
和keypress
事件处理程序,以下内容应该适用于所有浏览器。
编辑:它现在还过滤掉源自<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.