Как предотвратить обратное действие истории браузера по умолчанию для кнопки возврата с помощью JavaScript?

Есть ли способ предотвратить действие по умолчанию, когда пользователь нажимает клавишу Backspace в браузере? Мне не нужно препятствовать уходу пользователя, просто есть действие возврата по умолчанию. Мне нужно backspace, чтобы сделать что-то другое (это игра).

Я безуспешно пытался:

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

Если я помещу предупреждение в if, оно будет показано для нажатия клавиши возврата. Итак, код ключа правильный.

Изменить: это должно работать в Opera 10.6, Firefox 4, Chrome 6, IE 9 и Safari 5.

3 ответа

Решение

Вам не нужно return false или же e.stopPropagation(); ни один не будет иметь никакого значения в слушателе, связанном с addEventListener, Ваш код не будет работать в Opera, которая только позволяет вам подавить поведение браузера по умолчанию в keypress событие, или IE <= 8, который не поддерживает addEventListener, Следующее должно работать во всех браузерах, если у вас еще нет keydown а также keypress обработчики событий на document,

РЕДАКТИРОВАТЬ: теперь также отфильтровывает события, которые произошли от <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;

Если вы предпочитаете просто иметь исправление для себя, не затрагивая других пользователей при написании сценариев на веб-странице, читайте ниже.

Вот некоторые решения, которые меняют только используемый вами браузер:
- Firefox в Linux "не отображал" поведение backspace с 2006 года, поэтому оно не затронуто; (во всяком случае, до этого было просто настроено прокручивать вверх)
- Chrome только что объявил, что теперь будет делать то же самое; ( http://forums.theregister.co.uk/forum/1/2016/05/20/chrome_deletes_backspace/)
- Firefox в Windows может быть настроен на игнорирование возврата, перейдя в about:config и изменив настройку backspace_action на 2; ( http://kb.mozillazine.org/Browser.backspace_action)
- Сафари?!

Я нашел на странице Telerik скрипт, готовый к использованию. Скрипт блокирует действие кнопки "Назад": нажав в браузере кнопку "Назад" и "Backspace" на странице. Этот скрипт работает. Я использую это в своем проекте. http://www.telerik.com/community/code-library/aspnet-ajax/general/disable-backspace-from-master-page.aspx

Другие вопросы по тегам