退出时的Javascript确认框

退出时的Javascript确认框,javascript,redirect,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.onbeforeunl

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

代码如下:

    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;
我想实现什么功能?当用户单击“取消”时,我想重定向页面

我尝试了数以百万计的想法,但没有一个奏效。有什么想法吗

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


我尝试了数以百万计的方法,遇到了上百个问题。

对我有效,请使用签名
确认
。我真的不明白你是如何试图解决这个问题的,因为没有发出
confirm

window.onbeforeunload = function(){
  return confirm("Click 'Cancel' right now!");
}

我正在处理相同类型的问题(DojoV1.3)(请参阅)

它看起来像:


他工作得很好

所以。。。那么如何获得用户操作

实际上你不能,直接。浏览器负责显示确认信息,如果确定,则继续导航;如果取消,则不执行任何操作。直到您得到最终的
卸载
,您才知道用户是否单击了OK,此时已经太晚了

一种策略是猜测,如果用户在卸载前的
后不久仍在页面上,他们可能会单击取消:

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';
};
重定向
标志用于停止我们自己的导航,也会在卸载前发出
警告;双超时用于确保超时发生在确认框关闭后1秒,而不是打开后1秒。)

不幸的是,这仍然是非常不可靠的,因为即使用户单击OK,它也会执行重定向,但是他们导航到的页面需要两秒钟以上的时间才能开始加载

另一种方法是在卸载之前总是从
提示符中不返回任何内容,然后在0-timeout上设置自己的显式
confirm()
。但这是不可靠的跨浏览器,因为可以理解的是,浏览器并不真的想让页面做这样可能令人讨厌的事情。它可以在IE上使用,也可以在Firefox上使用,只要你破坏了后退/前进缓存(因为这会在确认之前隐藏页面)


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

是否尝试在onbeforeUnload事件处理程序中启动计时器事件?只要屏幕上有一个模式对话框(如确认),它们通常不会启动。(这可能取决于平台!)

当用户按下OK时,计时器可能会自动停止。如果没有,你需要在onunload阻止它

如果计时器确实关闭,则在计时器事件处理程序中重定向页面。

这是您想要的吗

<script type="text/javascript">
window.onbeforeunload = function (evt) {
var message = 'Are you sure you want to leave?';
if (typeof evt == 'undefined') {
evt = window.event;
}
if (evt) {
evt.returnValue = message;
window.location = "http://www.google.com/";
}
return message;
}
</script>

window.onbeforeunload=函数(evt){
var message='您确定要离开吗?';
如果(evt的类型==‘未定义’){
evt=window.event;
}
如果(evt){
evt.returnValue=消息;
window.location=”http://www.google.com/";
}
返回消息;
}
你可以简单地用你的url替换google.com。我使用google.com进行测试:)

干杯

当我使用
window.onbeforeunload=function(){return confirm(“立即单击“取消”);}
时,它会为我显示两次确认框。非常奇怪。
onbeforeunload
的返回值是一条消息,要在确认框中显示给用户
confirm()
不应在卸载前的
onbeforeunload
中使用。Tom试图这样做,因为大体上就是这样做的。@bobinceŁ所以。。。那么如何获得用户操作?如果用户单击“取消”,我只需要重定向他。请更详细地解释:“当用户单击“取消”时,我想重定向页面”或者:将一百万个想法中的一个的代码粘贴到这里,这样人们就可以理解您正试图实现的目标。
<script type="text/javascript">
window.onbeforeunload = function (evt) {
var message = 'Are you sure you want to leave?';
if (typeof evt == 'undefined') {
evt = window.event;
}
if (evt) {
evt.returnValue = message;
window.location = "http://www.google.com/";
}
return message;
}
</script>