Как я могу увеличить успех "window.OnBeforeUnload" для отправки пинга Ajax? - PullRequest
3 голосов
/ 30 июня 2011

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

Я создаю приложение для внутреннего использования в моем офисе (не на общедоступном веб-сайте), и, в частности, на одной «странице» мы хотели бы зарегистрировать «выход» пользователя.

Итак, у меня есть простое утверждение:

window.onbeforeunload = function () {
    $.post('LogExit.aspx');
}

Теперь, этот post не будет работать в большинстве случаев из-за того, что браузер не "хочет" запустить новый запрос, так как он знает, что страница уходит ... но, если я добавлю раздражающую alert поле, то он будет отправлять пинг 100% времени !!!

Пример:

window.onbeforeunload = function () {
    $.post('LogExit.aspx');
    alert("Ha ha ha, I can delay the browser!");
}

Итак, мой вопрос ... как мне обеспечить (или, по крайней мере, увеличить шансы на выполнение) пинг "LogExit.aspx", проходящий через?

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Поскольку вам нужно сделать какой-то запрос, и вам не важен ответ, вы можете использовать изображение в этом случае:

window.onbeforeunload = function () {
   var img= new Image();
   img.src = "LogExit.aspx";
   // you have to check on your server to see if it worked :)
}
0 голосов
/ 03 июля 2011

К сожалению, нет 100% или даже 10% "гарантированного" способа достижения этого ... поэтому я смог решить свои конкретные потребности, имея функцию every-10-seconds-send-a-ping.

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

Я действительно надеюсь, что лучшее решение появится в будущем.

...