javascript - 检测到浏览器/选项卡关闭时发出警报

2024-02-07

我有这个代码,当我单击链接 or refresh or 关闭选项卡.
但我需要警惕only on close窗口(选项卡)。这个怎么做?
我的网站上有许多外部和内部链接。

<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>

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

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:// and https://查看路径是否是相对路径,但看起来浏览器基本上将相对路径转换为绝对路径并在前面添加 http...

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript - 检测到浏览器/选项卡关闭时发出警报 的相关文章

随机推荐

  • 如何在 r 中的 Shiny 应用程序中对反应函数进行计时

    我有一个想要计时的函数 然后在 UI 上显示执行该函数花费了多少时间 如何重新获取该函数的执行时间 我尝试将变量放在反应函数中 函数周围等 我只想计算反应函数运行所需的时间 然后显示它 我试图不使用额外的包 library shiny De
  • 将大数组拆分为两个数组

    我有一个很大的对象数组 想将其分成两个包含交替顺序的对象的数组 Example 0 1 2 3 4 5 6 变成这两个数组 它们应该交替 0 2 4 6 and 1 3 5 有很多方法可以分割数组 但是 如果数组很大 什么是最有效 成本最低
  • 地图方向配额限制

    您好 我编写了一个谷歌脚本 可以获取特定起点和终点的距离 我在网上阅读了很多文章 但它们不包括谷歌地图脚本的限制 我想知道使用普通 Gmail 和企业 Gmail ID 可以拨打多少个起点和终点 多少个呼叫 EDIT 我在用着Maps ne
  • Ubuntu:如何链接二进制文件

    我有一个 C 代码 我编译了它 现在有了二进制 xyz 现在 每次我需要执行二进制文件时 我都必须切换到相应的目录才能使用 xyz 执行它 但是如何使用 xyz 命令从任何地方运行二进制文件 如何将此二进制文件链接到 ubuntu 中的命令
  • 多次使用 set.seed 的奇怪行为

    我在 R 中做作业时得到了一个奇怪的结果 有人可以向我解释这是怎么回事吗 指令告诉我设置种子 1 以保持一致性 首先 我设置了两次seed 1 set seed 1 x lt rnorm 100 mean 0 sd 1 set seed 1
  • 为什么某些 golang.org 包带有“x”前缀

    为什么某些 golang org 包名称带有前缀x 引起我兴趣的具体套餐是 bcrypt https godoc org golang org x crypto 我主要关心的是x意味着类似 e 的东西X实验性的 如果我想要稳定的东西 我应该
  • 用户脚本中的@include 和@match 有什么区别?

    The 有关元数据块的 GreaseSpot 页面 http wiki greasespot net Metadata Block说两者非常相似但是 match 制定了更严格的规则 字符的意思是 GreaseSpot 然后继续teach h
  • Int 或 NSInteger 作为方法参数的对象。 Objective-C

    我在传递数字作为方法的参数时遇到一些问题 void meth2 int next int 要调用该方法 我需要这样 int next int 1 self performSelectorOnMainThread selector meth2
  • MVC 验证在 Knockoutjs 帖子中丢失

    我正在使用 MVC4 和淘汰赛 我的页面上有一个强类型化到视图模型的表单 在该视图模型中 我定义了一些验证 例如 Required ErrorMessage Title is required public string Title get
  • 文本框失去焦点后如何调用函数

    我没有 Javascript JQuery AJAX 的经验 所以我试图了解是否可以在文本框失去焦点后调用在我的数据库上执行查询的函数 我在页面中显示一个表 使用 PHP 其中的文本框包含与数据库上的表相同的值 当有人更改文本框上的值时 我
  • Android studio gradle org.gradle.process.internal.ExecException

    我的等级是 apply plugin com android application android compileSdkVersion 23 buildToolsVersion 23 0 2 defaultConfig applicati
  • 在 Ubuntu 14.04 上运行没有 sudo 的 docker [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我尝试设置 Docker 这样我就不必输入sudo在使用它之前 我采取的步骤 我首先创建一个 docker 组sudo groupadd
  • 用Python永久存储字典的优雅方法?

    目前解析文件的成本很高 该文件会生成约 400 个键值对的字典 并且很少更新 以前有一个函数可以解析文件 以字典语法将其写入文本文件 即dict Adam Room 430 Bob Room 404 等 并将其复制并粘贴到另一个函数中 该函
  • 如何使用 google customsearch API 查询高级搜索?

    我如何以编程方式使用 Google Python 客户端库执行高级搜索 https www google ca advanced search用Google自定义搜索API搜索引擎以返回第一个列表n基于我查询的高级搜索的某些术语和参数的链接
  • 天文应用

    我正在尝试构建一个天文学应用程序 在其中我应该显示给定纬度 经度和时间的天顶处和天顶附近的星星 我了解位置天文学的基础知识 令我困惑的是如何用大量数据创建数据库 我的查询是 更喜欢哪个目录 喜欢依帕谷目录或亨利 德雷珀 它的优点和缺点是什么
  • Java控制台程序

    我想知道如何制作一个Java控制台程序 我使用 Eclipse 作为 IDE 正在寻找类似于 C 版本的控制台程序的东西 尝试 Google 但只找到导出到 JAR 并从命令行执行的解决方案 我更喜欢在控制台窗口中编译并直接测试 提前致谢
  • JavaScript 文本操作

    使用 JavaScript 我想用一些文本替换 anytext 之间的任何文本 我想让它通用 所以我想使用正则表达式 我该怎么做 示例 replace hello Hi 尝试这个 str replace g Hi 这将删除任何序列 全球范围
  • jquery 中 $('selector')[0] 和 $('selector').eq(index) 之间的区别。

    有什么区别 div1 a 0 and div1 a eq 0 对于以下标记 div a href click a div 请帮忙 div1 a 0 返回对 DOM 元素的直接引用 div1 a eq 0 返回一个 JQuery 对象 htt
  • 删除tinyMCE中多余的p标签

    当您从 Word 文档复制并粘贴到 tinyMCE 编辑器时 有时会出现不需要的内容 p tags p p nbsp p div class starpasspro example question p strong Example Lev
  • javascript - 检测到浏览器/选项卡关闭时发出警报

    我有这个代码 当我单击链接 or refresh or 关闭选项卡 但我需要警惕only on close窗口 选项卡 这个怎么做 我的网站上有许多外部和内部链接