我没有这方面的实际用例,但我很好奇,是否有办法做出反应(回调),如果用户在触发window.onbeforeunload时点击"停留在此页面上".
function warning(){
if(true){
console.log('leaving');
return "You are leaving the page";
}
}
window.onbeforeunload = warning;?
Run Code Online (Sandbox Code Playgroud)
Roc*_*mat 26
停留在页面上没有回调,但有一个用于离开页面,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;?
Run Code Online (Sandbox Code Playgroud)
演示: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;?
Run Code Online (Sandbox Code Playgroud)
由于问题是模态对话框,因此在setTimeout确认模态框之前不会触发回调.但正如您现在正确假设的那样,如果您单击"离开此站点",也会触发此操作.所以这很棘手.要解决这个问题,您需要增加setTimeout以使浏览器有足够的时间访问unload页面.
为什么有两个setTimeout()嵌套?好吧,一旦模态对话框弹出,计时器就会"运行".因此,我们不希望在模式对话框关闭之前运行该计时器.一旦发生这种情况,我们的内心setTimeout会随着时间的推移而发起并做一些事情.
我认为大多数现实场景的实际价值都是2.000内在的mssetTimeout
告诉用户点击取消的唯一方法是触发a setTimeout并查看它是否触发.没有办法从系统的confirm-esque框中查询返回.
| 归档时间: |
|
| 查看次数: |
23115 次 |
| 最近记录: |