首页 文章

在窗口关闭或页面刷新时运行JavaScript代码?

提问于
浏览
81

当用户关闭浏览器窗口或刷新页面时,有没有办法运行最终的JavaScript代码?

我正在考虑类似于onload的东西,但更像是onclose?谢谢 .

我不喜欢onbeforeunload方法,它总是会弹出一个确认框(保留页面/停留在mozilla上)或(重新加载/不重新加载chrome) . 有没有办法安静地执行代码?

8 回答

  • -2

    window.onbeforeunloadwindow.onunload ,它们的使用方式因浏览器而异 . 您可以通过将窗口属性设置为函数或使用 .addEventListener 来为它们提供帮助:

    window.onbeforeunload = function(){
       // Do something
    }
    // OR
    window.addEventListener("beforeunload", function(e){
       // Do something
    }, false);
    

    通常,如果您需要阻止用户离开页面,则使用 onbeforeunload (例如,用户正在处理某些未保存的数据,因此他/她应该在离开之前保存) . 据我所知,Opera不支持 onunload ,但您可以随时设置两者 .

  • 5

    好的,我找到了一个有效的解决方案,它包括使用 beforeunload 事件,然后让处理程序返回 null . 这将执行所需的代码而不会弹出确认框 . 它是这样的:

    window.onbeforeunload = closingCode;
    function closingCode(){
       // do something...
       return null;
    }
    

    希望这可以帮助 .

  • 12

    jQuery版本:

    $(window).unload(function(){
        // Do Something
    });
    

    Update :jQuery 3:

    $(window).on("unload", function(e) {
        // Do Something
    });
    

    谢谢加勒特

  • 3

    这里的文档鼓励在窗口上监听onbeforeunload事件和/或添加事件监听器 .

    window.addEventListener('beforeunload', function(event) {
      //do something here
    }, false);
    

    您还可以使用函数或函数引用填充窗口的.onunload或.onbeforeunload属性 .

    虽然浏览器的行为没有标准化,但该功能可能会返回浏览器在确认是否离开页面时将显示的值 .

  • 63

    你可以使用 window.onbeforeunload .

    window.onbeforeunload = confirmExit;
    function confirmExit(){
        alert("confirm exit is being called");
        return false;
    }
    
  • 6

    该事件名为 beforeunload ,因此您可以将函数分配给 window.onbeforeunload .

  • 3

    有时您可能希望让服务器知道用户正在离开页面 . 例如,这可用于清除临时存储在服务器上的未保存图像,将该用户标记为“脱机”,或者在完成会话时进行记录 .

    从历史上看,您将在 beforeunload 函数中发送AJAX请求,但这有两个问题 . 如果发送异步请求,则无法保证请求将正确执行 . 如果您发送同步请求,它更可靠,但浏览器将挂起,直到请求完成 . 如果这是一个缓慢的请求,这将给用户带来巨大的不便 .

    幸运的是,我们现在有navigator.sendBeacon() . 通过使用 sendBeacon() 方法,当用户代理有机会时,数据将异步传输到Web服务器,而不会延迟卸载或影响下一个导航的性能 . 这解决了提交分析数据的所有问题:数据可靠地发送,它影响下一页的加载 . 以下是其用法示例:

    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请求 .

  • 38

    你可以尝试这样的事情:

    <SCRIPT language="JavaScript">
    <!--
    function loadOut()
    {
    window.location="http://www.google.com";
    }
    //-->
    </SCRIPT>
    
    <body onBeforeUnload="loadOut()">
    

相关问题