Отменить перенаправление / beforeUnload

#javascript #jquery #url-redirection #cancel-button

#javascript #jquery #перенаправление #кнопка отмены

Вопрос:

Я использую плагин jQuery BlockUI для отображения некоторого приятного («Пожалуйста, подождите …») сообщения каждый раз, когда пользователь меняет URL, нажимает ссылку, перенаправляется, куда-то идет и т.д.:

 $(window).on('beforeunload', function(){$.blockUI();});
  

Теперь я хотел бы дополнить это сообщение Cancel кнопкой, которая предотвратила бы такое перенаправление и позволила бы пользователю оставаться на текущей странице. Это приводит меня к вопросу: есть ли в Javascript какой-либо способ остановить процесс изменения URL, который выполняется?Или любой другой метод / решение, которое я мог бы привязать к событию нажатия этой Cancel кнопки?

Я пытаюсь сделать что-то глупое или бесполезное?

Комментарии:

1. Итак, можете ли вы подтвердить, что именно то, что вы хотите, должно произойти за короткий промежуток времени, в течение которого отображается старая страница, для появления кнопки, которая может отменить изменение URL. Но на самом деле это не мешает этому происходить иначе… Для большинства пользователей время выгрузки будет меньше секунды, что не является достаточным временем, чтобы дать им возможность нажать «Отмена»? Пожалуйста, объясните еще раз: D

Ответ №1:

Вы можете попробовать e.preventDefault() или return false в бит beforeunload, но то, что вы хотите сделать, технически не поддерживается браузером по соображениям безопасности. Представьте последствия открываемого окна…

Лучше всего использовать встроенный синтаксис. При возврате строки в beforeunload всплывающее диалоговое окно с вопросом, уверены ли вы, что хотите выйти, с этой строкой в качестве вопроса и параметрами «покинуть страницу» или «остаться на странице».

Пример

 $(window).on('beforeunload', function(){
    return "Do you really want to leave this page?";
});
  

Обновить

После дальнейшего прочтения этого выясняется, что основные браузеры поддерживают синтаксис возвращаемой строки, а Firefox — нет. Firefox просто заменит вашу строку на строку «Вы уверены, что хотите выйти с этой страницы?» или что-то в этом роде.

TLDR: Вы можете использовать приведенный выше синтаксис возвращаемой строки во всех браузерах, но ваше пользовательское предложение не будет отображаться в Firefox 🙂

Комментарии:

1. 1 за попытку ответа, но либо я что-то упускаю, либо мы говорим о двух разных вещах. Возврат строки beforeunload вызывает (если я не ошибаюсь) отображение стандартного модального диалога с моей строкой (кроме Firefox! :]). Поскольку он модальный, изменение страницы / URL не произойдет, пока пользователь не согласится. Это то, чего я вообще не хочу. Я хочу предотвратить изменение URL, только если пользователь нажимает Cancel (это, то, что я хочу сделать, вообще возможно). Но если он / она ничего не делает, должно произойти обычное изменение URL. Отображение стандартного beforeunload окна вопроса предотвратит это.