【问题标题】:javascript's unload and beforeunload alternativejavascript 的 unload 和 beforeunload 替代方案
【发布时间】:2012-09-17 13:58:14
【问题描述】:

我需要监视用户何时离开页面(移至不同站点而不是同一站点)或关闭窗口/选项卡。我可以通过$(window).bind('unload', function() {}); 实现这一点,但onload 是一个包罗万象的事件:它还捕获页面刷新并导航到同一网站上的不同页面。请问如何使用 javascript/jQuery 检测这两个事件(页面刷新和导航到同一网站中的另一个页面)?

【问题讨论】:

    标签: javascript jquery onbeforeunload


    【解决方案1】:

    我认为这是不可能的,我不知道这样的事件。

    一种可能的解决方案是将当前 url 与目标 url 进行比较,但由于安全和隐私原因,这是不可能的,请参阅:

    How can i get the destination url in javascript onbeforeunload event?

    【讨论】:

      【解决方案2】:

      在每一页上,

      var leaving = true;
      
      $(function() {
          $('a[rel!=ext]').click(function () { leaving = false; });
          $('form').submit(function () { leaving = false; });
      });
      
      $(function() { window.onbeforeunload = unloadPage; });
      
      function unloadPage() {
          if(leaving) {
              // Put your logic here
          }
      }
      

      然后确保所有指向外部网站的链接都具有rel="ext" 属性。

      【讨论】:

      • 当用户在导航栏中输入新的 url(可能是同一个域,也可能不是)时,这将不起作用,如果用户单击页面上的链接,这将起作用。此外,您可以将表单发布到不同的域。
      • 如果用户键入一个新的 url,unloadPage() 处理程序会触发(尽管我认为不是 Opera?)。但是,如果新 URL 在当前站点的范围内,那么是的,您可能会得到误报。
      • 可以通过编写更智能的逻辑来处理发布到当前站点之外的 URL 的表单,而不是简单地设置 leave=false。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多