退出时的Javascript确认框

Tom*_*Tom 2 javascript redirect

在用户出口设置确认框时我遇到了奇怪的问题.

这是代码:

    function closeIt() {
    var message = "Click 'Cancel' right now!";

    evt=(typeof evt == 'undefined') ? window.event:evt;
    evt ? evt.returnValue = message:null;
    return message;
    }   
    window.onbeforeunload = closeIt;
Run Code Online (Sandbox Code Playgroud)

我想实现什么功能?当用户单击"取消"时,我想重定向页面.

我有三十多个想法,其中没有一个是有效的.有任何想法吗?

编辑 这是我想要的:用户试图关闭他的浏览器选项卡,我想显示小确认框,如果他点击确定 - >然后关闭选项卡,如果他点击取消 - >不要关闭选项卡并重定向用户以保存页面.

我尝试了数以百万计的方法,遇到了许多问题.

bob*_*nce 6

那么......如何让用户采取行动呢?

你实际上不能,直接.浏览器负责显示确认,如果确定则继续导航,如果取消则不执行任何操作.在得到最终结果之前,你无法确定用户是否点击了OK unload,此时为时已晚.

一种策略是猜测,如果用户在此之后不久就在页面上beforeunload,他们可能会点击取消:

var redirecting= false;
window.onbeforeunload = function() {
    if (redirecting) return;
    setTimeout(function() {
        setTimeout(function() {
            redirecting= true;
            location.href= 'http://www.example.com/';
        }, 2000);
    }, 0);
    return 'Boo hoo, please stay with me';
};
Run Code Online (Sandbox Code Playgroud)

(redirecting标志是停止我们自己的导航也会引发beforeunload警告;双重超时是为了确保在确认框关闭后一秒钟发生超时,而不是在打开确认框后一秒钟.)

不幸的是,这仍然非常不可靠,因为它将执行重定向,即使用户单击确定,但他们导航的页面开始加载的时间超过两秒.

另一种方法是始终从beforeunload提示中返回任何内容,然后confirm()在0超时上设置自己的显式.但这是不可靠的跨浏览器,因为可以理解的是,浏览器并不真的想让页面像这样做一些令人讨厌的东西.它有点适用于IE,几乎适用于Firefox,只要你打破后退/前进缓存(因为这会在确认发生之前隐藏页面).

总之,这并不是一个很好的解决方案.重定向用户的用例是什么?也许您可以尝试替换当前页面的内容而不是重定向?