Это походило на что-то почти невозможное, чтобы сделать, когда оно было представлено мне. Я знаю, что можно отобразить диалоговое окно для подтверждения при отъезде веб-страницы. Но действительно ли возможно отобразить диалоговое окно при отъезде сайта?
Я не был в состоянии найти/создать что-либо, что может считать строку поиска и знать, что Вы покидаете сайт.
Прежде всего определите, какие события действительно могут отвлечь вашего пользователя от ваш сайт?
Итак. что вы можете сделать со всем этим?
onclick
onsubmit
формы, отправляющей обратно за пределы твой сайт. onbeforeunload
, но у вас не будет особого успеха узнать, что происходит. Кроме того, существуют определенные ограничения, связанные с перед загрузкой
, поэтому большую часть времени ваши руки будут связаны. Почему вы все равно хотите контролировать это событие, кроме как беспокоить пользователей, чтобы они не оставили вас. В любом случае попрошайничество не приносит справедливости в веб-мире. И когда какой-то сайт надоедает мне сообщениями или, что еще хуже, не дает мне уйти, я больше не хочу возвращаться. Пахнет плохим, плохим юзабилити и дает намек на рекламный сайт.
Скорее попытайтесь заинтересовать ваших пользователей , предоставив им ценный контент.
Лучше всего слушать нестандартное событие beforeunload
. Это поддерживается почти всеми браузерами, кроме Opera, которая, как известно, очень строго придерживается стандартов W3C.
Пример запуска:
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; });
});
Вам нужно только дать всем внешним ссылкам стандартный атрибут rel="ext"
, чтобы обозначить, что это внешние ссылки.
<a href="http://google.com" rel="ext">Google</a>
Используя выражение из этого вопроса, вы можете сделать следующее:
$.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
срабатывает, когда пользователь покидает страницу/сайт.
Посмотрите на эту тему.
Одним из возможных способов достижения этой цели может быть использование Javascript для изучения всех тегов a
на вашей странице при ее загрузке и проверки, не ссылаются ли они на внешний сайт. Если это так, вы можете добавить событие onclick
, чтобы показать окно подтверждения/оповещения или что-то более элегантное. Конечно, использование jQuery значительно упростит Javascript, который вам придется писать, как в приведенной выше теме.