Отобразите предупреждение при отъезде сайта, не только страницы

Это походило на что-то почти невозможное, чтобы сделать, когда оно было представлено мне. Я знаю, что можно отобразить диалоговое окно для подтверждения при отъезде веб-страницы. Но действительно ли возможно отобразить диалоговое окно при отъезде сайта?

Я не был в состоянии найти/создать что-либо, что может считать строку поиска и знать, что Вы покидаете сайт.

10
задан tahdhaze09 2 March 2010 в 19:18
поделиться

6 ответов

Прежде всего определите, какие события действительно могут отвлечь вашего пользователя от ваш сайт?

  1. Щелчок по ссылке внутри содержимого вашего веб-сайта
  2. Отправка формы внешнему действию
  3. JavaScript из дочернего окна, которое изменяет window.location в его родительском
  4. Пользователь, запускающий поиск в строке поиска (FF и IE)
  5. Пользователь вводит поиск / адрес в адресной строке браузера.
  6. Пользователь нажимает кнопку "Назад" (или Backspace), когда он только что перешел на ваш сайт
  7. Пользователь нажимает кнопку "Вперед" (или Shift-Backspace), когда он ранее был вне сайта, но вернулся, перейдя туда с помощью функции кнопки "Назад"
  8. Пользователь закрывает окно браузера

Итак. что вы можете сделать со всем этим?

  1. Это несложно. Проверьте свои привязки и, если они указывают наружу, добавьте некоторые функции в событие onclick
  2. , аналогичное 1. Добавьте свои функции для события onsubmit формы, отправляющей обратно за пределы твой сайт.
  3. -> 8.у меня действительно нет подходящего решения, которым можно было бы управлять. Вы можете сколько угодно злоупотреблять событием onbeforeunload , но у вас не будет особого успеха узнать, что происходит. Кроме того, существуют определенные ограничения, связанные с перед загрузкой , поэтому большую часть времени ваши руки будут связаны.

Настоящий вопрос?

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

Скорее попытайтесь заинтересовать ваших пользователей , предоставив им ценный контент.

15
ответ дан 3 December 2019 в 14:18
поделиться

Лучше всего слушать нестандартное событие 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>
13
ответ дан 3 December 2019 в 14:18
поделиться

Используя выражение из этого вопроса, вы можете сделать следующее:

$.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;
});
1
ответ дан 3 December 2019 в 14:18
поделиться

Это возможно. Просто попробуйте ввести вопрос или ответ в SO, а затем уйти, прежде чем отправлять его. Неважно, нажимаете ли вы ссылку или вводите текст в адресной строке, вы получите ответ «Вы уверены?» тревога. Вы можете написать на SO Meta вопрос, как они это делают.

1
ответ дан 3 December 2019 в 14:18
поделиться

Вы можете сделать это, если разработаете свой сайт как одностраничное веб-приложение.
Это означает, что загружается одна страница, а затем динамически загружается другое содержимое с помощью ajax.

В этом случае onbeforeunload срабатывает, когда пользователь покидает страницу/сайт.

1
ответ дан 3 December 2019 в 14:18
поделиться

Посмотрите на эту тему.

Одним из возможных способов достижения этой цели может быть использование Javascript для изучения всех тегов a на вашей странице при ее загрузке и проверки, не ссылаются ли они на внешний сайт. Если это так, вы можете добавить событие onclick, чтобы показать окно подтверждения/оповещения или что-то более элегантное. Конечно, использование jQuery значительно упростит Javascript, который вам придется писать, как в приведенной выше теме.

1
ответ дан 3 December 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: