Это звучало как нечто почти невозможное, когда оно было представлено мне. Я знаю, что вы можете отобразить диалоговое окно для подтверждения при выходе из веб-страницы. Но можно ли отображать диалоговое окно при выходе из сайта?
Я не смог найти / создать что-либо, что может читать адресную строку, и знать, что вы покидаете сайт.
Во-первых, определите, какие события могут отвлечь вашего пользователя от вашего сайта?
Так. что вы можете сделать по всем этим?
onclick
onsubmit
формы, отправляемой вне вашего сайта. onbeforeunload
столько, сколько хотите, но у вас не будет большого успеха, зная, что происходит. И есть определенные ограничения, связанные с onbeforeunload
а также, поэтому ваши руки будут привязаны большую часть времени. Почему вы хотите контролировать это событие в любом случае, за исключением того, чтобы беспокоить ваших пользователей, чтобы они не оставляли вас. В любом случае, прошение не дает большой справедливости в веб-мире. И когда какой-то сайт будет беспокоить меня сообщениями или еще хуже, препятствовать мне уйти, я больше не хочу возвращаться. Он пахнет плохой плохой юзабилити и дает намек на рекламный сайт.
Скорее попытайтесь заинтересовать своих пользователей , предоставив им ценный контент.
Ваш лучший beforeunload
– прослушивание нестандартного события beforeunload
. Это поддерживается почти всеми браузерами, ожидающими от Opera, которая, как известно, строго придерживается стандартов W3C.
Пример Kickoff:
window.onbeforeunload = function() { return "You're leaving the site."; };
Это сообщение будет отображаться в виде диалога подтверждения.
В вашем конкретном случае вам нужно отключить его (просто установить значение null
) всякий раз, когда нажимается навигационная ссылка или отправляется внутренняя форма. Вы можете это сделать, прослушивая событие click
нужных ссылок и событие submit
желаемых форм. jQuery может оказать большую помощь здесь:
window.onbeforeunload = function() { return "You're leaving the site."; }; $(document).ready(function() { $('a[rel!=ext]').click(function() { window.onbeforeunload = null; }); $('form').submit(function() { window.onbeforeunload = null; }); });
Вам нужно всего лишь предоставить всем внешним ссылкам атрибут deacto standard rel="ext"
чтобы обозначить, что это внешние ссылки.
<a href="http://google.com" rel="ext">Google</a>
Это может помочь
onclick
перед подключением initLocalLinkException()
; HTML :
<a href="test.html">internal link</a> <a href="#test">html anchor</a> <a href="http://www.google.com">external link</a> <a href="http://www.google.com" target="_blank">blank external link</a> <form action="test.html" method="post" > <button type="submit">Post Button</button> </form>
JavaScript :
$(document).ready(function () { initLocalLinkException(); window.onbeforeunload = function () { confirmExit() }; $('form').submit(function () { window.onbeforeunload = null; }); }); function initLocalLinkException() { $('a').click(function () { if ($(this).attr('target') != '_blank') { var link = $(this).attr('href'); if (link.substr(0, 4) == 'http') { var LocalDomains = new Array('http://www.yourdomain.com', 'https://yourdomain.com', 'localhost', '127.0.0.1'); var matchCount = 0; $.each(LocalDomains, function () { if (this == link.substr(0, this.length)) { matchCount++; } }); if (matchCount == '0') { confirmExit(); } else { window.onbeforeunload = null; } } else { window.onbeforeunload = null; } } }); } function confirmExit() { alert('Are you sure?'); // Do whatever u want. }
Взгляните на эту тему .
Одним из возможных способов достижения этого является использование Javascript для проверки всех тегов на вашей странице при загрузке и проверки того, связаны ли они с внешним сайтом. Если это так, вы можете добавить событие onclick
чтобы показать окно подтверждения / предупреждения или что-то более элегантное. Конечно, использование jQuery значительно упростит Javascript, который вам придется писать, как в приведенном выше потоке.
Используя выражение из этого вопроса , вы можете сделать следующее:
$.expr[':'].external = function(obj){ return !obj.href.match(/^mailto\:/) && (obj.hostname != location.hostname); }; $.expr[':'].internal = function(obj){ return obj.hostname == location.hostname; }; $(function() { var unloadMessage = function() { return "Don't leave me!"; }; $('a:internal').click(function() { window.onbeforeunload = null; }); $('form').submit(function() { window.onbeforeunload = null; }); $('a:external').click(function() { window.onbeforeunload = unloadMessage; }); window.onbeforeunload = unloadMessage; });
Возможно. Просто попробуйте ввести вопрос или ответ на SO, а затем перейдите к нему перед отправкой. Неважно, нажимаете ли вы ссылку или введите адресную строку, вы получаете сообщение «Вы уверены?». оповещения. Вы можете опубликовать сообщение на SO Meta, спрашивая, как они это делают.
Это можно сделать, если вы создаете свой сайт как одностраничное веб-приложение.
Это означает, что загружается одна страница, а другое содержимое загружается динамически с помощью ajax.
В этом случае onbeforeunload
запускается, когда пользователь покидает страницу / сайт.