我在浏览器关闭时实现了一些功能。
window.onbeforeunload = function (evt) {
evt = (evt)? evt:event;
clickY = evt.clientY;
altKey = evt.altKey;
keyCode = evt.keyCode;
if (altKey == true && keyCode == 0){
//Make call to the server to clear the cache
}else if(clickY < 0){
//Make a call to the server to clear the cache
}else {
return;
}
};
现在上面代码中的问题是,当我通过点击地址栏按Enter键或刷新页面时刷新按钮我的代码给了我警报(“21112”)我不想要因为呼叫会触发仅当浏览器关闭时。 那么有人可以帮助我实现这一目标。
答案 0 :(得分:8)
window.onbeforeunload
事件是在您的网页unload
之前调用的。
没有方法可以检查它是刷新还是浏览器窗口关闭事件。
它由不同的场景 MSDN :
触发anchor.click
方法。document.write
方法。document.close
方法。window.close
方法。window.navigate
或NavigateAndFind方法。location.replace
方法。location.reload
方法。location.href
属性指定新值。type=submit
控件将表单提交到ACTION属性中指定的地址,或调用form.submit
方法。window.open
方法,为窗口名称提供可能的值_self
。document.open
方法。你无法解决这个问题。
另请注意,window.onbeforeunload
事件应该通知用户他离开页面和处理函数应该return
字符串值将包含在确认弹出窗口中(Firefox 4+
除外bug })。
您不能强迫用户留在页面上。
注意: onbeforeunload
唯一能做的就是通知用户他要离开你的页面
(这是因为一些邪恶的页面可以打开另一个页面等等......和垃圾邮件用户。这是安全限制。)
如果要在卸载窗口之前进行AJAX调用,则需要使用onunload
事件。请注意,您的AJAX调用必须 synchronus 。异步调用无效。
答案 1 :(得分:0)
this帖子中的人说他基于onbeforeunload
事件的方法适用于IE。
答案 2 :(得分:0)
我在同一个问题上工作了一段时间,所以我会向你解释我发现了什么。
1)每个浏览器处理window.onbeforeunload
事件的方式略有不同 - 我看到一旦事件触发,会话就会丢失,无论用户是否选择留在页面上。
2)Web应用程序根本没有能力阻止用户关闭浏览器或导航离开页面(出于显而易见的原因)但是通过实现服务器端钩子,我能够调用必要的清理仅在浏览器关闭时代码,所以我不打扰提示用户(这有点像劫持他们的浏览器)
如果您需要在关闭窗口之前提示用户,那么当他们键入新的URL时,您将提示他们。它们是同一个