仅对未显式声明target的标签生效,作为兜底而非强制覆盖,必须配合rel="noopener noreferrer"防安全漏洞,且需js补全跨域链接、避免影响资源路径及破坏锚点等体验。

<base target="_blank"> 能统一设置所有未显式声明 target 的 @#@#@#@#@#@#@#@#@#@0 → 会走 <base target="_blank">
@#@#@#@#@#@#@#@#@#@1 → 无视 <base>,仍在当前页打开@#@#@#@#@#@#@#@#@#@2 → 同样受 <base target> 影响,在新页打开(可能破坏体验)必须配 rel="noopener noreferrer",否则有安全漏洞
<base target="_blank"> 让所有链接默认新开页,但新开页可通过 window.opener 访问原始页面的 window 对象。攻击者可借此重定向原页面、窃取登录态或执行脚本。
- 仅靠
<base target="_blank">不够,必须确保每个新开页链接都带rel="noopener noreferrer" -
<base>本身不支持设置rel,所以得靠 JS 补全:document.querySelectorAll('a[href]').forEach(a => { if (a.hostname !== location.hostname) { a.target = '_blank'; a.rel = 'noopener noreferrer'; } }); - 这个 JS 必须放在
底部或DOMContentLoaded后执行,否则可能漏掉动态插入的链接
href 和 target 可以共存,但要小心 CSS url() 被意外改写
如果同时设了 <base href="https://cdn.example.com/" target="_blank">,它既影响链接打开方式,也影响所有相对路径资源的解析起点——包括 CSS 里的 url() 函数。
-
background: url('icon.svg');在 CSS 中会被解析为https://cdn.example.com/icon.svg - 但
fetch('./api/data.json')和import('./utils.js')完全不受影响,仍以当前页面 URL 为基准 - 如果你只想要统一 target,却不想动资源路径,就**不要写 href 属性**,只保留
<base target="_blank">
上线前必须检查所有已有链接是否依赖默认 _self 行为
<base target="_blank"> 一加就是全站生效,哪怕只有一处内部跳转(比如表单提交后回退按钮),也会被强制新开页,用户可能根本回不到上一页。
- 搜索页面中所有没写
target的<a></a>,确认它们确实该在新页打开 - 特别注意:
<a href="#"></a>、<a href="javascript:void(0)"></a>、锚点链接(href="#top")都会被新开页,往往不符合预期 - CI/CD 流程里建议加校验:扫描 HTML 文件,禁止出现未配
rel的target="_blank",无论来自<base>还是手写
真正麻烦的不是加一行 <base target="_blank">,而是它让所有没显式声明 target 的链接行为变得隐式且全局——一旦漏掉某个内部跳转或锚点,修复成本远高于逐个加属性。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











