target="_blank"可新开标签页或窗口,但必须搭配rel="noopener noreferrer"防止安全风险和性能问题,且href不可省略。

用 <a></a> 标签加 target="_blank" 最直接
想点链接就新开一个页面,不是跳转覆盖当前页,核心就是 target 属性。默认不写 target 是在当前页跳转;设成 target="_blank" 就会新开标签页(或窗口,取决于浏览器设置)。
常见错误是只写 target="blank" —— 少了下划线,浏览器不认识,结果还是当前页跳转。
-
target="_blank"是唯一标准值,大小写敏感,不能写成Blank或new - 必须搭配
href,否则只是个空链接,没实际跳转行为 - 如果链接指向的是相对路径(比如
href="about.html"),它会在新页加载同域下的该文件;如果是完整 URL(如href="https://example.com"),就打开外部站点
为什么建议加上 rel="noopener noreferrer"
单纯用 target="_blank" 有安全和性能隐患:新页面可以通过 window.opener 访问原页面的 window 对象,可能被恶意页面重定向原页、窃取信息,或拖慢原页性能。
加 rel="noopener noreferrer" 能切断这种连接:
立即学习“前端免费学习笔记(深入)”;
-
noopener让新页面无法访问window.opener,解决安全问题 -
noreferrer还会阻止Referer头发送,保护来源隐私(但也会让目标页收不到来源信息) - 二者常一起写,顺序无关,但缺一不可——只写
noreferrer不带noopener在旧版 Safari 中仍存在 opener 泄露风险
正确写法:<a href="https://example.com" target="_blank" rel="noopener noreferrer">点我</a>
新窗口 vs 新标签页?浏览器说了算
target="_blank" 的实际表现(新开标签页 or 新窗口)不由 HTML 决定,而是由用户浏览器设置、是否按住 Ctrl/Cmd 键、甚至鼠标中键点击方式控制。
你没法用 HTML 强制“一定弹窗”或“一定开标签页”。所谓“弹出另一个页面”,本质只是脱离当前上下文,不打断原页运行——这点 target="_blank" 已经做到。
- 想真正弹出独立窗口(含尺寸、工具栏等控制),得用 JavaScript 的
window.open(),但现代浏览器普遍拦截非用户触发的open()调用 - 移动端 Safari 对
target="_blank"支持稳定,但部分安卓 WebView 可能忽略rel属性,noopener仍是必要项 - 如果链接是下载链接(
download属性),target="_blank"可能导致下载失败或行为异常,此时应避免混用
内联框架 <iframe></iframe> 不是“弹出页面”的解法
有人误以为用 <iframe src="xxx"></iframe> 能“弹出”页面,其实它只是把另一个页面嵌在当前页里,不新建上下文,也不脱离当前 DOM。用户滚动、导航、关闭都受限于父页布局。
它和 target="_blank" 解决的是完全不同的问题:
-
<iframe></iframe>适合嵌入内容(如地图、表单、第三方 widget),但 SEO 差、跨域限制多、移动端体验难调 -
target="_blank"是导航行为,适用于跳转阅读、外链引用、资料查阅等场景 - 两者不能互相替代;硬用
iframe模拟“弹出”,反而增加维护成本和兼容性问题
rel="noopener noreferrer"。不是所有项目都跑在最新 Chrome 里,老版本 Edge 或某些企业内网环境,没这个属性真可能出问题。


















