Требуется помощь по предварительной загрузке или нажмите кнопку возврата браузера - PullRequest
3 голосов
/ 15 ноября 2010

Если пользователь нажимает кнопку «Назад» браузера, то я хочу, чтобы появилось приглашение и запросить подтверждение.Если пользователь нажимает «ОК», он должен перейти к xx.html.Если пользователь нажимает кнопку «Отмена», это должно помешать навигации.Как я могу это сделать?

Примечание: я уже пробовал метод onbeforeunload, но он работает для всех действий навигации.Например, нажатие на ссылку на странице также вызовет это событие и покажет сообщение пользователю.

Ответы [ 4 ]

6 голосов
/ 15 ноября 2010

Вы не можете. Лучшее, что вы можете сделать, - это использовать onbeforeunload и удалить это событие при нажатии на обычную ссылку:

<script type="text/javascript">
window.onbeforeunload = function() {return "Are you sure?"}
</script>

<a href="somewhere.html" onclick="window.onbeforeunload = null;">Leave</a>
1 голос
/ 15 ноября 2010

Невозможно провести различие между навигационными действиями в событии onbeforeunload.Вы можете отключить его для всех ссылок / форм на странице, удалив обработчик window.onbeforeunload в обработчике onclick каждой ссылки или onsubmit для форм.Однако вы все равно не сможете определить, нажал ли пользователь назад, переслать, добавить закладку и т. Д. Или набрал новый адрес в адресной строке.

0 голосов
/ 07 июля 2015

Во-первых, вам нужно перехватить событие «beforeunload» (которое здесь делали предыдущие ответы).

// Display browser warning message when back/forward/reload or hyperlink navigation occurs
$(window).on('beforeunload', function(e) {
  console.log('page navigation captured');
  return 'By leaving this page you will lose the data you have entered here.';
});

Что еще более важно, вы хотите разрешить непрерывную навигацию по определенным элементам (например, ссылки с классом"позволяют-навигации").Чтобы добиться этого, нужно удалить обработчик событий при нажатии на выбранные вами ссылки.

// Disable capture for certain elements
$('.allow-navigation').on('click', function(e) {
    $(window).off('beforeunload');
    console.log('page navigation allowed');
});

Будет работать для ваших ссылок типа:

<a href="#" class="allow-navigation">Click me</a>

Таким образом, вы можете управлять навигацией по страницам.Браузер назад / вперед / и т.д. все еще открывает окно подтверждения.Но выбранные вами ссылки будут работать без сбоев.

Надеюсь, это поможет.

0 голосов
/ 21 мая 2014

вы можете сделать это

$(window).bind("beforeunload", function() {
    return "Are you Sure you want to leave this page?"; // Return whatever message you want
});​

также, если xx.html является страницей в их истории, вам не нужно добавлять что-нибудь просто вернуть сообщение, оно автоматически поставит кнопки для Вы

Изменить: см. Скрипку, прежде чем предположить, что это не отвечает на вопрос спросил http://jsfiddle.net/Lxq93/

Редактировать: нет определенного способа показать сообщение только на обороте Кнопка в моих знаниях я также посмотрел и видел только методы, которые поднимают на кнопку назад, $(window).bind("beforeunload",function(){return;}) и $(window).onbeforeunload = function(){return;} и они оба поднимают когда страница обновляется или любая другая навигация от текущая страница. В настоящее время это лучший ответ, который может быть предоставлен в 2014 году

Edit:

выше для всех событий выгрузки

http://jsfiddle.net/Lhw2x/85/

возился с тем, что через все его нижние объекты это нельзя сделать с помощью javascript, пока кто-нибудь не решит заставить все основные браузеры использовать конкретное имя для каждого события выгрузки, вместо того, чтобы просто быть событием выгрузки

таким образом, ответ «нет». Вы не можете принудительно перейти на определенную страницу, когда они нажимают «ОК» в подтверждении, когда они пытаются перейти на другую страницу

и кнопка назад не имеет определенного имени события, она делит свое событие с несколькими различными событиями в событии unload, поэтому вы не можете сделать функцию кнопки назад определенной через javascript

...