当用户关闭浏览器窗口或刷新页面时,有没有办法运行最终的JavaScript代码?
我正在考虑类似于onload的东西,但更像是onclose?谢谢 .
我不喜欢onbeforeunload方法,它总是会弹出一个确认框(保留页面/停留在mozilla上)或(重新加载/不重新加载chrome) . 有没有办法安静地执行代码?
有 window.onbeforeunload 和 window.onunload ,它们的使用方式因浏览器而异 . 您可以通过将窗口属性设置为函数或使用 .addEventListener 来为它们提供帮助:
window.onbeforeunload
window.onunload
.addEventListener
window.onbeforeunload = function(){ // Do something } // OR window.addEventListener("beforeunload", function(e){ // Do something }, false);
通常,如果您需要阻止用户离开页面,则使用 onbeforeunload (例如,用户正在处理某些未保存的数据,因此他/她应该在离开之前保存) . 据我所知,Opera不支持 onunload ,但您可以随时设置两者 .
onbeforeunload
onunload
好的,我找到了一个有效的解决方案,它包括使用 beforeunload 事件,然后让处理程序返回 null . 这将执行所需的代码而不会弹出确认框 . 它是这样的:
beforeunload
null
window.onbeforeunload = closingCode; function closingCode(){ // do something... return null; }
希望这可以帮助 .
jQuery版本:
$(window).unload(function(){ // Do Something });
Update :jQuery 3:
$(window).on("unload", function(e) { // Do Something });
谢谢加勒特
这里的文档鼓励在窗口上监听onbeforeunload事件和/或添加事件监听器 .
window.addEventListener('beforeunload', function(event) { //do something here }, false);
您还可以使用函数或函数引用填充窗口的.onunload或.onbeforeunload属性 .
虽然浏览器的行为没有标准化,但该功能可能会返回浏览器在确认是否离开页面时将显示的值 .
你可以使用 window.onbeforeunload .
window.onbeforeunload = confirmExit; function confirmExit(){ alert("confirm exit is being called"); return false; }
该事件名为 beforeunload ,因此您可以将函数分配给 window.onbeforeunload .
有时您可能希望让服务器知道用户正在离开页面 . 例如,这可用于清除临时存储在服务器上的未保存图像,将该用户标记为“脱机”,或者在完成会话时进行记录 .
从历史上看,您将在 beforeunload 函数中发送AJAX请求,但这有两个问题 . 如果发送异步请求,则无法保证请求将正确执行 . 如果您发送同步请求,它更可靠,但浏览器将挂起,直到请求完成 . 如果这是一个缓慢的请求,这将给用户带来巨大的不便 .
幸运的是,我们现在有navigator.sendBeacon() . 通过使用 sendBeacon() 方法,当用户代理有机会时,数据将异步传输到Web服务器,而不会延迟卸载或影响下一个导航的性能 . 这解决了提交分析数据的所有问题:数据可靠地发送,它影响下一页的加载 . 以下是其用法示例:
sendBeacon()
window.addEventListener("unload", logData, false); function logData() { navigator.sendBeacon("/log.php", analyticsData); }
sendBeacon() 是supported in:
边缘14
Firefox 31
Chrome 39
Safari 11.1
歌剧26
iOS Safari 11.4
目前不支持:
Internet Explorer
Opera Mini
如果您需要添加对不支持的浏览器的支持,请使用polyfill for sendBeacon() . 如果该方法在浏览器中不可用,它将发送同步AJAX请求 .
你可以尝试这样的事情:
<SCRIPT language="JavaScript"> <!-- function loadOut() { window.location="http://www.google.com"; } //--> </SCRIPT> <body onBeforeUnload="loadOut()">
8 回答
有
window.onbeforeunload
和window.onunload
,它们的使用方式因浏览器而异 . 您可以通过将窗口属性设置为函数或使用.addEventListener
来为它们提供帮助:通常,如果您需要阻止用户离开页面,则使用
onbeforeunload
(例如,用户正在处理某些未保存的数据,因此他/她应该在离开之前保存) . 据我所知,Opera不支持onunload
,但您可以随时设置两者 .好的,我找到了一个有效的解决方案,它包括使用
beforeunload
事件,然后让处理程序返回null
. 这将执行所需的代码而不会弹出确认框 . 它是这样的:希望这可以帮助 .
jQuery版本:
Update :jQuery 3:
谢谢加勒特
这里的文档鼓励在窗口上监听onbeforeunload事件和/或添加事件监听器 .
您还可以使用函数或函数引用填充窗口的.onunload或.onbeforeunload属性 .
虽然浏览器的行为没有标准化,但该功能可能会返回浏览器在确认是否离开页面时将显示的值 .
你可以使用
window.onbeforeunload
.该事件名为
beforeunload
,因此您可以将函数分配给window.onbeforeunload
.有时您可能希望让服务器知道用户正在离开页面 . 例如,这可用于清除临时存储在服务器上的未保存图像,将该用户标记为“脱机”,或者在完成会话时进行记录 .
从历史上看,您将在
beforeunload
函数中发送AJAX请求,但这有两个问题 . 如果发送异步请求,则无法保证请求将正确执行 . 如果您发送同步请求,它更可靠,但浏览器将挂起,直到请求完成 . 如果这是一个缓慢的请求,这将给用户带来巨大的不便 .幸运的是,我们现在有navigator.sendBeacon() . 通过使用
sendBeacon()
方法,当用户代理有机会时,数据将异步传输到Web服务器,而不会延迟卸载或影响下一个导航的性能 . 这解决了提交分析数据的所有问题:数据可靠地发送,它影响下一页的加载 . 以下是其用法示例:sendBeacon()
是supported in:边缘14
Firefox 31
Chrome 39
Safari 11.1
歌剧26
iOS Safari 11.4
目前不支持:
Internet Explorer
Opera Mini
如果您需要添加对不支持的浏览器的支持,请使用polyfill for sendBeacon() . 如果该方法在浏览器中不可用,它将发送同步AJAX请求 .
你可以尝试这样的事情: