如何使用JavaScript阻止浏览器的退格按钮的默认历史记录返回操作?

时间:2010-10-03 15:46:30

标签: javascript events

当用户在浏览器上按退格键时,有没有办法阻止默认操作?我不需要阻止用户离开,只需要进行默认的退格操作。我需要退格键做一些不同的事情(这是游戏)。

我尝试没有成功:

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,IE 9和Safari 5.

3 个答案:

答案 0 :(得分:12)

您不需要return falsee.stopPropagation();对addEventListener附加的听众都没有任何影响。您的代码在Opera中不起作用,Opera只允许您禁止keypress事件中的默认浏览器行为,或IE <= 8,这不支持addEventListener。以下内容适用于所有浏览器,只要您keydown上没有keypressdocument事件处理程序。

编辑:它现在还会过滤掉源自<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;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您希望自己修复此问题,而不是在编写网页时影响其他用户,请阅读以下内容。

以下是一些仅更改您正在使用的浏览器的解决方案:
- Linux上的Firefox&#34; unmapped&#34;自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
- Safari?!