【问题标题】:How to access JavaScript href event that triggered beforeunload如何访问在卸载前触发的 JavaScript href 事件
【发布时间】:2012-08-22 01:53:28
【问题描述】:

我想访问导致 beforeunload 事件的事件。具体来说,如果我点击另一个页面的链接,我想知道 beforeunload 事件处理程序中的链接是什么。

这样,我将根据 URL 的内容在 beforeunload 事件处理程序中执行不同的操作。

例如“http:”或“https:”警告用户丢失未保存的更改; 'mailto:' 或 'skype:' 不会警告用户,因为页面实际上不会被卸载。

我正在尝试为这样的问题构建一个好的解决方案: mailto link (in chrome) is triggering window.onbeforeunload - can i prevent this?

【问题讨论】:

    标签: javascript dom-events mailto onbeforeunload


    【解决方案1】:

    我已经准备好告诉您这是不可能的,因为 onbeforeunload 事件仅在您检查 event.target、event.originaltarget 等时报告已被窗口触发。但是,如果您覆盖 window.onclick,我们可以修改该方法以注册页面上最后单击的元素。然后,通过为 window.onbeforeunload 提供代码,我们可以指定新的行为来检查最后点击的元素的 href。万岁,啤酒!

    这里的代码将为您提供您想要的确切信息,使用纯 javascript 并且无需在您的锚标记中添加任何内容。我还输入了 preventDefault() ,它会弹出“此页面要求您确认是否要离开 - 您输入的数据可能不会被保存。”确认框。希望这会有所帮助 - 您可以从这里弄清楚该怎么做。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>12065389</title>
        <meta charset="utf-8">
        <script type="text/javascript">
            var last_clicked;
    
            window.onclick = function(e) {
                last_clicked = e.target;
                return true;
            }
    
            window.onbeforeunload = function(e) {
                var e = e || window.event;
                if (last_clicked.href) {
                    alert(last_clicked.href);
                    e.preventDefault();
                }
            }
       </script>
    </head>
    <body>
    <a href="http://google.com">google</a>
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      我可能会将事件附加到页面上的所有链接,而不是 beforeunload 事件。

      类似:

      $("a").click(function(evt) {
          if($(this).attr('href').indexOf('http') == 0) {
              if(confirm("Are you sure?")) {
                  //continue
              } else {
                  evt.preventDefault();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-24
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多