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();
это может вызвать небольшую задержку, если ваш сервер медленный, но это должно решить проблему Пинга не отправляется.