2015-09-07 2 views
10

Я пытаюсь остановить пользователя от возврата в моем веб-приложении. Для этого я попытался поймать window.onpopstate и добавил e.preventDefault, чтобы отменить эффект кнопки «Назад».Возможно ли e.preventDefault в window.onPopState?

Но, похоже, этого не происходит.

window.addEventListener('popstate',function(e){ 
console.log(e); e.preventDefault(); 
}); 

Невозможно предотвратить всплывающее событие браузера? Или я делаю что-то неправильно?

ответ

15

Согласно этому documentation, то popstate событие не сократимое:

Спецификация: HTML5
Интерфейс: PopStateEvent
Пузыри: Да
аннулированию: Нет
Цель: DefaultView
Действие по умолчанию: Нет

0

Во-первых, «невозможно» никогда не бывает приемлемым ответом.

Во-вторых, вы можете компенсировать ошибки popstate. В примере мой богатый редактор должен постоянно компенсировать ленивый ублюдок: Backspace. Это не действительный ключ для кнопки «Назад» (так же, как пробел для «спуска страницы»), но люди навязывают свои личные предпочтения миру, а не добавляют расширение браузера , поэтому, когда люди нажимают на него, иногда появляется popstate вместо редактора удаление любого символа слева от клавиатуры.

Следующий код (не регистрирует зависимости здесь) определяет, когда срабатывает ошибка popstate, удаляет его по лицу с помощью e.preventDefault();, а затем исправляет адресную строку с history.go(1);. Человек, использующий редактор, не замечает, что что-то произошло, поскольку браузеру не разрешалось манипулировать DOM. Этот код минимален (другие люди могут компенсировать эту ошибку в различных контекстах), и я тестировал это только в Gecko/Firefox, поэтому не забудьте проверить браузеры Blink, Presto, Trident и WebKit.

window.onpopstate = function(e) 
{ 
if (id_('editor') && is_node_parent(document.activeElement,id_('editor'))) 
{ 
    e.preventDefault(); 
    history.go(1); 
} 
} 
+2

«Не возможно», безусловно, может быть ответ – Rob

+0

Я подал ошибку на Chrome о забой и сделал сильный случай о высоком риске потери данных, и вы знаете, что? Они выслушали и взяли backspace в качестве задней кнопки из Chrome. После всех этих лет и все, что нужно, это спросить. Теперь, если бы только YouTube слушал про пробел ... – Zectbumo