我对我的申请有疑问。每当用户意外关闭浏览器窗口时,我都希望在此之前进行一些清理操作。我已经使用过onunload事件,但问题是这个事件有时会被解雇,有时却没有。我该怎么办,是否有更好的方法来处理这类问题。
答案 0 :(得分:30)
window.onbeforeunload = function() {
return 'You have unsaved changes!';
}
请参阅MSDN article on onbeforeunload
SO中还有一个similar question
答案 1 :(得分:6)
尝试:
window.onbeforeunload = function() { ...your code... }
答案 2 :(得分:3)
根据我的经验,onunload在不同浏览器中的工作方式不同。为什么不使用另一个名为onbeforeunload的事件处理程序。它应该工作。在窗口关闭之前,Onbeforeunload将首先执行,这样可以解决您的问题。
答案 3 :(得分:3)
这有效:
window.onbeforeunload = function(){
console.log('closing shared worker port...');
return 'Take care now, bye-bye then.';
};
如果您正在使用SharedWorkers,并且需要告诉工作人员管理的端口较少,那么这很方便 - 否则,您最终可能会刷新一个浏览器选项卡并获得类似“成功”的内容连接:10个其他选项卡“因为一个选项卡使工作人员保持活动状态,而另一个选项卡的刷新继续将新端口连接推送到您的阵列。
希望这有帮助。
答案 4 :(得分:0)
这是我的答案之一,只有当用户想要关闭窗口并且还在某种程度上劫持浏览器消息时才给你onbeforeunload .......
<html>
<head>
<script src='http://code.jquery.com/jquery-1.6.2.min.js'></script> <!--this is get jquery header file its not required but i have used jquery for minor correction-->
<script type="text/javascript" src="http://fbug.googlecode.com/svn/lite/branches/firebug1.4/content/firebug-lite-dev.js"></script><!--this will give a firebug to check the console in IE-->
<script language='javascript'>
window.onbeforeunload = function(evt){
var message = "";
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; //validating the browser where its chrome or not
if(is_chrome){
message = "Do you want to close the browser or not?";
}
if(this.flag == 1 || $('#help').css('background-color') == 'red'){
console.log("red");
return message;
} else { console.log("blue"); return NULL;}
}
function change(){
$('#help').css('background-color','red');
this.flag = 1;
}
</script>
</head>
<body>
<a id='help' onclick=change() title="please click on Links">Links</a>
</body>
</html>
我认为它可能对任何身体都有用,谢谢......
答案 5 :(得分:0)
由于安全原因,这是不允许的。 onbeforeunload是一个浏览器API,在不同的浏览器上有不同的行为。