Как предотвратить переход с веб-страницы с помощью JavaScript?
javascript
onbeforeunload
Энтузиаст программного обеспечения
источник
источник
Ответы:
Использование
onunload
позволяет отображать сообщения, но не прерывает навигацию (потому что уже слишком поздно). Однако использованиеonbeforeunload
приведет к прерыванию навигации:Примечание. Возвращается пустая строка, поскольку новые браузеры предоставляют сообщение типа «Любые несохраненные изменения будут потеряны», которое нельзя изменить.
В старых браузерах вы могли указать сообщение, которое будет отображаться в приглашении:
источник
window.onbeforeunload = function() { return ""; }
В отличие от других методов, представленных здесь, этот фрагмент кода не заставит браузер отображать предупреждение, спрашивающее пользователя, хочет ли он уйти; вместо этого он использует четную природу DOM для перенаправления обратно на текущую страницу (и, таким образом, отмены навигации), прежде чем браузер получит возможность выгрузить ее из памяти.
Поскольку он работает путем прямого замыкания навигации, его нельзя использовать для предотвращения закрытия страницы; однако его можно использовать для отключения перебора кадров.
Отказ от ответственности: вы никогда не должны этого делать. Если на странице есть код блокировки фреймов, пожалуйста, уважайте пожелания автора.
источник
В итоге я получил немного другую версию:
В другом месте я устанавливаю флаг dirty на true, когда форма загрязняется (или я иным образом хочу предотвратить уход). Это позволяет мне легко контролировать, получает ли пользователь запрос подтверждения навигации.
С текстом в выбранном ответе вы увидите повторяющиеся запросы:
источник
undefined
вместо нуля. (1) это условно (2) в нем упоминается «грязная» самая распространенная законная причина, препятствующая перемещению, и (3) есть снимок экрана.Эквивалент более современным и совместимым с браузером способом с использованием современных API addEventListener.
Источник: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
источник
event.returnValue
В примере Аймана, возвращая false, вы предотвращаете закрытие окна / вкладки браузера.
источник
Эквивалент принятому ответу в jQuery 1.11:
Пример JSFiddle
В ответе altCognito используется
unload
событие, которое происходит слишком поздно, чтобы JavaScript не смог прервать навигацию.источник
Используйте onunload .
Для jQuery, я думаю, это работает так:
источник
unload
событие срабатывает, когда пользователь покидает страницу, в отличие от того,beforeunload
которое срабатывает незадолго до этого (и может быть отменено)Предлагаемое сообщение об ошибке может дублировать сообщение об ошибке, которое уже отображается в браузере. В Chrome два похожих сообщения об ошибках отображаются одно за другим в одном окне.
В Chrome текст, отображаемый после настраиваемого сообщения: «Вы уверены, что хотите покинуть эту страницу?». В firefox он вообще не отображает наше собственное сообщение об ошибке (но по-прежнему отображает диалоговое окно).
Более подходящим сообщением об ошибке может быть:
Или стиль stackoverflow: «Вы начали писать или редактировать сообщение».
источник
Если вы ловите кнопку браузера назад / вперед и не хотите уходить, вы можете использовать:
В противном случае вы можете использовать событие beforeunload , но сообщение может работать или не работать в разных браузерах и требует возврата чего-то, что вызывает встроенное приглашение.
источник