3

当我单击链接刷新关闭选项卡时,我有此代码会发出警报。但我只需要在关闭窗口(选项卡)时
发出警报。这该怎么做?我的网站上有许多外部和内部链接。

<html>
    <head>
        <script type="text/javascript">
            window.onbeforeunload = function (e) {
                var e = e || window.event;
                //IE & Firefox
                if (e) {
                    e.returnValue = 'Are you sure?';
                }
                // For Safari
                 return 'Are you sure?';
            };
        </script>
    </head>
    <body>

        <!-- this will ask for confirmation: -->
       <!-- I need to alert for external links. -->
        <a href="http://google.com">external link</a>


       <!-- this will ask for confirmation: -->
<!-- I don't need to alert for local links in my web site -->
            <a href="about.html">internal link</a>
    </body>
</html>
4

1 回答 1

0

document.activeElement在这种情况下很方便,它将等于您单击以卸载页面的链接。然后,您可以检查链接的href属性是否包含您的主机名。codepen.io 的一个例子是(这里是 demo):

window.onbeforeunload = function (e) {
  var e = e || window.event;
  var element = document.activeElement;

  if(element.tagName === 'A' && element.href.indexOf('codepen.io/') === -1) {
    //IE & Firefox
    if (e) {
      e.returnValue = 'Are you sure?';
    }
    // For Safari
    return 'Are you sure?';
  }
};

我最初的想法是做一个正则表达式http://https://查看路径是否是相对的,但看起来浏览器基本上将相对路径转换为绝对路径并在 http...

如果您想编写此代码以使其更通用,您可以使用location.hostname而不是静态键入主机名来进行比较。

最后,您在 IE 中的使用量可能会有所不同,具体取决于您要支持哪些 IE,上述代码可能需要更新。现在的趋势是支持 IE11+ :)

于 2016-02-04T18:50:06.740 回答