Выходное сообщение в стиле Gmail

Я понимаю, что это, вероятно, дубликат, но я уже целый день гуглю / SOing и не могу найти удовлетворительного ответа. Если на SO уже есть ответ, пришлите мне туда.

У меня есть клиент, который настаивает на появлении всплывающего сообщения о выходе, подтверждающего, что он хочет покинуть сайт, как это делает Gmail. (Я уже пытался возражать против этого. Он непоколебим, поэтому никаких комментариев о том, что это плохая практика, пожалуйста.)

Я нашел этот код:

<script>
    window.onbeforeunload = function() {
        return 'Are you sure you want to exit?';
    }
<script>

Но он работает независимо от того, что я делаю - перезагружаю страницу, нажимаю на навигацию и т. Д.

Я просто хочу, чтобы сообщение отображалось, когда пользователь закрывает вкладку/браузер. Я подозреваю, что мне не хватает чего-то простого, но я не эксперт по Javascript.

Любая помощь будет принята с благодарностью.

Спасибо

РЕДАКТИРОВАТЬ

Вот что работает довольно хорошо. Спасибо всем!

var isLeavingSite = true;

//This would be called on each link/button click that navigates
$('a, input[type="submit"]').click(function(){
    isLeavingSite = false;
});

window.onbeforeunload = function() {
    if(isLeavingSite)
    return 'Are you sure you want to exit?';
}

person john.w    schedule 18.11.2011    source источник


Ответы (3)


Хотя это может быть довольно трудоемко (в зависимости от того, как написан ваш сайт), вы можете сделать что-то вроде этого (псевдокод):

var isLeavingSite = true;

//This would be called on each link/button click that navigates
function GlobalLinkHandler()
{
    isLeavingSite = false;
}

window.onbeforeunload = function() {
    if(isLeavingSite)
    return 'Are you sure you want to exit?';
}

Если вы используете jQuery, вы можете использовать приведенный ниже код, чтобы изменить флаг isLeavingSite:

$('a, input[type="submit"]').click(function(){ isLeavingSite = false; });
person James Hill    schedule 18.11.2011
comment
Это не совсем так; вы можете установить прослушиватель событий щелчка для всех ссылок на вашей странице, сохранить href ссылки в переменной, проверить эту переменную внутри события onbeforeunload, чтобы увидеть, является ли это внутренней ссылкой сайта или внешней ссылкой. - person Jeff Wilbert; 18.11.2011
comment
Вы должны иметь возможность увеличивать переменную для каждой новой вкладки, и когда количество вкладок равно единице при выходе, вы можете показать сообщение о выходе, вам нужно будет сохранить переменную в файле cookie, чтобы она была доступна на каждой странице. - person Joseph Le Brech; 18.11.2011
comment
$('a, input[type=submit]').click(function(){ isLeavingSite = false; }); Работал хорошо. Теперь, если бы я только мог помешать надоедливому обновлению сделать это... - person john.w; 19.11.2011
comment
@john.w, если бы вы отметили jQuery, я бы написал это для вас :). Я обновил свой вопрос для полноты. - person James Hill; 19.11.2011
comment
Ой, я думаю, я должен был пометить jQuery, ха. - person john.w; 19.11.2011

Что нужно сделать, так это использовать переменную, которую вы установили, если на сайте была нажата какая-либо ссылка, а затем внутри события onbeforeunload проверьте, установлена ​​​​ли эта переменная, что означает, что они щелкнули ссылку, или не установлена, что означает, что они закрывают вкладку.

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

person Jeff Wilbert    schedule 18.11.2011

Если вы используете jQuery, попробуйте это Подтвердить перед выходом

person blacktea    schedule 18.11.2011