Javascript:压制"此页面要求您确认要在onbeforeunload上保留"弹出窗口

dot*_*hen 7 javascript ajax 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;
}
Run Code Online (Sandbox Code Playgroud)

根据去年的价值return陈述("",null,true,false,,或不含return语句的话)我可以有两种情况之一:

1)用户获得"你想要ping吗?" 确认(好),发送ping(好),并向用户显示"此页面要求您确认要离开"弹出窗口(BAD).

-要么-

2)用户获得"你想要ping吗?" 确认(好),ping 发送(BAD),并且没有向用户显示"此页面要求您确认要离开"弹出窗口(正常).

如何发送AJAX ping,但是抑制"此页面要求您确认要离开"弹出窗口?

编辑:听起来很荒谬,我发现这个问题的"解决方法"是alert()xmlhttp.send()声明之后.唯一干净的方法是提醒用户他的ping已被发送.如果未来StackOverflowers找到更好的解决方案,我很想知道.

谢谢.

gil*_*ly3 9

您可以使Ajax请求同步.

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

如果你的服务器很慢,它可能会导致轻微的延迟,但它应该解决ping没有被发送的问题.

  • 这将是一个SJAX请求;) (8认同)

Lys*_*sol 2

好吧,我没有在你离开之前这样做,而是在卸载时完成了这件事,这是我在 FF 和 IE 中工作的内容(除了 chrome 之外,这就是我所得到的): http: //jsfiddle.net/rmpLm/9/

也许你可以让它在 Chrome 上工作,但如果你不能,也许你可以这样做,这样如果你点击“确定”,它就会带你到一个发送它的页面。希望能帮助到你 : )

编辑:也许你应该考虑制作它,这样它就可以加载