我在用户出口处设置确认框时遇到了奇怪的问题。
以下是代码:
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;
我想实施哪些功能?当用户点击取消时,我想重定向页面。
我有三十多个想法,而不是他们的工作。有什么想法吗?
修改 这就是我想要的: 用户试图关闭他的浏览器标签,我想显示一个小确认框,如果他点击OK - >然后关闭标签,如果他点击取消 - >不要关闭选项卡并将用户重定向到保存页面。
我尝试了数以百万计的方法,遇到了许多问题。
答案 0 :(得分:6)
那么......如何让用户采取行动?
你实际上不能,直接。浏览器负责显示确认,如果正常则继续导航,如果取消则不执行任何操作。您无法确定用户是否点击确定,直到您获得最终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';
};
(redirecting
标志是停止我们自己的导航也导致beforeunload
警告;双重超时是为了确保在确认框关闭后一秒钟发生超时,而不是第二次打开后。)
不幸的是,这仍然非常不可靠,因为它会执行重定向,即使用户单击确定,但是他们导航的页面开始加载的时间超过两秒。
另一种方法是始终从beforeunload
提示返回任何内容,然后在0超时上设置自己的显式confirm()
。但这是不可靠的跨浏览器,因为可以理解的是,浏览器并不真的想让页面像这样做一些令人讨厌的东西。它有点适用于IE,几乎适用于Firefox,只要你打破后退/前进缓存(因为这会在确认发生之前隐藏页面)。
总之,这并不是一个好的解决方案。重定向用户的用例是什么?也许您可以尝试替换当前页面的内容而不是重定向?
答案 1 :(得分:1)
这就是你想要的吗?
<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>
您只需将google.com替换为您的网址即可。我使用google.com进行测试:)
干杯!
答案 2 :(得分:0)
为我工作confirm
。由于没有发出confirm
,我真诚地不明白你是如何解决它的。
window.onbeforeunload = function(){
return confirm("Click 'Cancel' right now!");
}
答案 3 :(得分:0)
我正在使用相同类型的问题(使用Dojo v1.3)(请参阅http://jsfiddle.net/ZPxtj/19/)。
看起来像:
window.onbeforeunload = function() {
...
};
运作良好。
答案 4 :(得分:0)
您是否尝试在onbeforeUnload事件处理程序中启动计时器事件?只要屏幕上有模态对话框(如确认),它们通常不会触发。 (这可能取决于平台!)
当用户按下OK时,计时器可能会自动被杀死。如果没有,你需要在onunload中停止它。
如果您的计时器确实关闭,您可以在计时器事件处理程序中重定向页面。