Javascript: подавить" эта страница просит вас подтвердить, что вы хотите оставить " всплывающее окно onbeforeunload

когда пользователь покидает страницу, мне нужно спросить его, хочет ли он выполнить определенное действие перед уходом.

<script type="text/javascript">
$(document).ready(function() {
        window.onbeforeunload = askConfirm;
});

function askConfirm() {
    var addFriend = confirm("Would you like to ping?");
    if (addFriend) {
        var xmlhttp;
        if (window.XMLHttpRequest) {
            xmlhttp=new XMLHttpRequest();
        } else {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.open("GET","http://example.com?ping=1234",true);
        xmlhttp.send();
    }
    return null;
}

в зависимости от значения последнего return заявление ("", null, true, false или отсутствие return заявление вообще) у меня может быть одна из двух ситуаций:

1) пользователь получает "Вы хотели бы пинговать?"подтверждение (хорошо), пинг отправляется (хорошо), и пользователю предоставляется " эта страница просит вас подтвердите, что вы хотите оставить " popup (BAD).

или

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

как я могу отправить AJAX ping, но подавить "эта страница просит вас подтвердить, что вы хотите уйти" всплывающее окно?

Edit: как ни смешно это звучит, "работа вокруг", которую я нашел для этой проблемы, - это alert() после xmlhttp.send() заявление. Единственный чистый способ сделать это-предупредить пользователя о том, что его пинг был отправлен. Если будущие StackOverflowers найдут лучшее решение, я хотел бы знать.

спасибо.

2 ответов


ну вместо того, чтобы делать это перед отъездом, я сделал это onunload, и вот что я должен работать в FF и IE (кроме chrome, это все, что у меня есть):http://jsfiddle.net/rmpLm/9/.

возможно, вы можете заставить его работать на chrome, но если вы не можете, возможно, вы могли бы сделать это так, что если вы нажмете ok, он приведет вас к странице, куда вы его отправляете. надеюсь, это поможет:)

EDIT: возможно, вам стоит подумать о том, чтобы сделать это так, чтобы он делал это onload


вы можете сделать запрос Ajax синхронным.

xmlhttp.open("GET","http://example.com?ping=1234", false); // use false here 
xmlhttp.send(); 

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