运行JavaScript代码后mailto与tel类型链接失效如何修复
问题根因
在执行默认行为拦截逻辑之前,先判断链接的协议类型,跳过特殊系统协议的处理即可,修复后的完整代码如下:
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
相关产品推荐
相关产品推荐

