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)
我想实现什么功能?当用户单击"取消"时,我想重定向页面.
我有三十多个想法,其中没有一个是有效的.有任何想法吗?
编辑 这是我想要的:用户试图关闭他的浏览器选项卡,我想显示小确认框,如果他点击确定 - >然后关闭选项卡,如果他点击取消 - >不要关闭选项卡并重定向用户以保存页面.
我尝试了数以百万计的方法,遇到了许多问题.
那么......如何让用户采取行动呢?
你实际上不能,直接.浏览器负责显示确认,如果确定则继续导航,如果取消则不执行任何操作.在得到最终结果之前,你无法确定用户是否点击了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,只要你打破后退/前进缓存(因为这会在确认发生之前隐藏页面).
总之,这并不是一个很好的解决方案.重定向用户的用例是什么?也许您可以尝试替换当前页面的内容而不是重定向?