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

如何实现除指定href外所有站外链接默认在新窗口打开

问题原因

原代码的判断逻辑使用了逻辑或||,只要满足「链接域名不等于本站域名」或者「href属性不等于javascript:;」其中一个条件,就会给链接设置新窗口打开属性。而javascript:;类型的链接本身没有hostname属性,必然满足第一个判断条件,所以会被误判为站外链接。

修正方案

把判断逻辑改为逻辑与&&,只有同时满足「链接域名不等于本站域名」、「href属性不等于javascript:;」两个条件时,才设置新窗口打开:

// 给无href属性的a标签设置默认值
document.querySelectorAll("a:not([href])").forEach(element => {
  element.setAttribute("href", "javascript:;")
});

const allLinks = document.querySelectorAll('a');
for (let i = 0; i < allLinks.length; i++) {
  const a = allLinks[i];
  // 只有站外+非javascript:;的链接才设置新窗口打开
  if (a.hostname !== location.hostname && a.getAttribute("href") !== 'javascript:;') {
    a.rel = 'noopener';
    a.target = '_blank';
  }
}

效果验证

  • 站外链接(示例中的https://yahoo.com):域名与本站不一致且href不是javascript:;,会在新窗口打开,符合预期
  • 原本无href属性的链接:被设置为javascript:;,不满足判断条件,不会触发新窗口打开,符合预期

如果站点有后续动态插入DOM的链接,把上述逻辑封装为函数,在新链接插入后重新调用一次即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:09:03