当用户关闭浏览器窗口或刷新页面时,是否可以运行最终的JavaScript代码?
我在想类似于onload但更像onclose的东西吗?谢谢。
我不喜欢onbeforeunload方法,该方法总是弹出一个确认框(让页面保留/保留在mozilla上)或(重新加载/不在chrome上重新加载)。有没有办法安静地执行代码?
当用户关闭浏览器窗口或刷新页面时,是否可以运行最终的JavaScript代码?
我在想类似于onload但更像onclose的东西吗?谢谢。
我不喜欢onbeforeunload方法,该方法总是弹出一个确认框(让页面保留/保留在mozilla上)或(重新加载/不在chrome上重新加载)。有没有办法安静地执行代码?
Answers:
同时存在window.onbeforeunload
和window.onunload
,根据浏览器的使用方式有所不同。您可以通过将窗口属性设置为function或使用以下命令来关联它们.addEventListener
:
window.onbeforeunload = function(){
// Do something
}
// OR
window.addEventListener("beforeunload", function(e){
// Do something
}, false);
通常,onbeforeunload
用于需要停止用户离开页面的情况(例如,用户正在处理一些未保存的数据,因此他/她应在离开之前进行保存)。据我所知,Operaonunload
不支持,但是您可以始终设置两者。
好的,我找到了一个可行的解决方案,包括使用beforeunload
事件,然后使处理程序返回null
。这将执行所需的代码,而不会弹出确认框。它是这样的:
window.onbeforeunload = closingCode;
function closingCode(){
// do something...
return null;
}
希望这可以帮助。
return false;
做到这一点(即防止默认行为),并且在语义上更正确。
有时您可能想让服务器知道用户正在离开页面。例如,这对于清除临时存储在服务器上的未保存图像,将该用户标记为“脱机”或在完成会话时进行记录很有用。
历史上,您会在beforeunload
函数中发送AJAX请求,但是这有两个问题。如果发送异步请求,则不能保证该请求将被正确执行。如果您发送同步请求,它会更可靠,但是浏览器将挂起,直到请求完成。如果这是一个缓慢的请求,则将给用户带来极大的不便。
幸运的是,我们现在有了navigator.sendBeacon()
。通过使用该sendBeacon()
方法,当用户代理有机会将数据异步传输到Web服务器时,不会延迟卸载或影响下一个导航的性能。这解决了提交分析数据时遇到的所有问题:数据可靠地发送,异步发送,并且不影响下一页的加载。这是一个用法示例:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
在以下位置受支持:
当前不支持它:
如果您需要添加对不受支持的浏览器的支持,这是sendBeacon()的polyfill。如果该方法在浏览器中不可用,它将发送一个同步AJAX请求。
http://example.com/script.php?token=something&var1=val1&var2=val2
将这些值放入GET之类的。
您可以尝试如下操作:
<SCRIPT language="JavaScript">
<!--
function loadOut()
{
window.location="http://www.google.com";
}
//-->
</SCRIPT>
<body onBeforeUnload="loadOut()">