You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行JavaScript代码后mailto与tel类型链接失效如何修复

问题根因

你编写的标签全局点击监听逻辑存在逻辑漏洞:代码会拦截所有target属性不为_blank的链接的默认行为,而mailto:、tel:这类系统级协议的链接通常不会额外加target="_blank"属性,被拦截后自然无法触发唤起邮箱、拨号界面的默认系统行为。

在执行默认行为拦截逻辑之前,先判断链接的协议类型,跳过特殊系统协议的处理即可,修复后的完整代码如下:

const allLinks = document.querySelectorAll("a:link");

allLinks.forEach(function (link) {
  link.addEventListener("click", function (e) {
    const href = link.getAttribute("href");
    
    // 跳过特殊协议链接,保留默认行为
    if (href.startsWith('mailto:') || href.startsWith('tel:') || href.startsWith('sms:')) {
      return;
    }
    
    // 原有默认行为拦截逻辑
    if (link.hasAttribute("target") === false) {
        e.preventDefault();
    } else {
      if (link.getAttribute("target") !== "_blank") {
        e.preventDefault();
      }
    }

    // 回到顶部逻辑
    if (href === "#")
      window.scrollTo({
        top: 0,
        behavior: "smooth",
      });

    // 此处保留你原有未粘贴完的自定义跳转逻辑(如单页应用路由跳转等)
  });
});
补充说明

如果业务中还用到ftp:、magnet:、whatsapp:等其他非网页跳转协议,直接在特殊协议判断条件中新增对应匹配规则即可。

内容的提问来源于stack exchange,提问作者Frank Pitkat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:48:01