Как предотвратить обратное действие истории браузера по умолчанию для кнопки возврата с помощью 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