我没有这方面的实际用例,但我很好奇,如果用户在触发 window.onbeforeunload 时点击“留在此页面上”,是否有办法做出反应(回调)。
function warning(){
if(true){
console.log('leaving');
return "You are leaving the page";
}
}
window.onbeforeunload = warning;
我没有这方面的实际用例,但我很好奇,如果用户在触发 window.onbeforeunload 时点击“留在此页面上”,是否有办法做出反应(回调)。
function warning(){
if(true){
console.log('leaving');
return "You are leaving the page";
}
}
window.onbeforeunload = warning;
留在页面没有回调,但离开页面有回调,window.unload
.
尝试在 中设置超时beforeunload
,然后在卸载中清除它。如果你留下,超时将运行,否则将被清除。
var timeout;
function warning() {
timeout = setTimeout(function() {
alert('You stayed');
}, 1000);
return "You are leaving the page";
}
function noTimeout() {
clearTimeout(timeout);
}
window.onbeforeunload = warning;
window.unload = noTimeout;
演示:http: //jsfiddle.net/aPwfz/1/
简短的回答:不,目前还没有回调或任何直接的方法来拦截“留在此页面上”事件。
但是,您可以稍微作弊并创建如下构造:
function warning() {
setTimeout(function() {
setTimeout(function() {
alert('user choosed to stay on this site: ' + location.href);
}, 100);
},1);
return "You are leaving the page";
}
window.onbeforeunload = warning;
由于问题是模态对话框,因此在setTimeout
您确认该模态框之前不会触发回调。但正如您现在正确假设的那样,如果您单击“离开此站点”,这也会触发。所以这很棘手。要解决这个问题,您需要增加setTimeout
以使浏览器有足够的时间访问unload
该页面。
为什么会有两个setTimeout()
的嵌套?好吧,一旦弹出模式对话框,计时器就会“运行”。所以我们不想在模式对话框关闭之前运行那个计时器。一旦发生这种情况,我们的内在setTimeout
就会随着时间的推移启动并做一些事情。
我认为大多数现实世界场景的现实价值是关于2.000
内部的 mssetTimeout
告诉用户单击取消的唯一方法是触发 asetTimeout
并查看它是否触发。没有办法从系统的confirm
-esque 框中询问返回。
在返回“这里的问题”之前,尝试触发 setTimeout 作为第一个调用任何其他函数的代码(比如 5-10 秒)。IE
window.onbeforeunload = confirmExit;
function confirmExit() {
setTimeout("thisFunction;", 10000);
return "do you realy want to close?";
}
并取消 onbeforeclose 这对我有用:尝试一个空函数:
window.onbeforeunload = function(){};
谢谢,祝你好运!
$(window).bind('beforeunload', function(){
return '\n Your custom message';
});
附加了'beforeunload'事件,当你关闭页面,点击返回按钮或重新加载页面时,一个确认框会提示你是否真的想去,选择确定退出页面:取消停止页面退出并停留在同一页面上。