target="_blank"必须搭配rel="noopener noreferrer"才安全,否则新页面可通过window.opener劫持原页面;合法target值仅\_self、\_blank、\_parent、\_top和framename五类。

target="_blank" 是唯一可靠且语义明确的新标签页打开方式;但单独使用它等于留后门,必须搭配 rel="noopener noreferrer" 才算安全落地。
为什么 target="_blank" 必须配 rel="noopener noreferrer"
不加 rel="noopener" 时,新页面可通过 window.opener 直接控制原页面跳转、读取 DOM,甚至执行恶意重定向。这不是理论风险——攻击者只需在链接目标页写一行 window.opener.location = "https://fake-login.example",就能把你的用户劫持走。
常见错误包括:
-
target="blank"(漏下划线)→ 浏览器当普通字符串处理,等同于target="_self,当前页跳转 -
target="_new"或target="new"→ 非标准值,所有现代浏览器都忽略,退化为_self - 只加
rel="noopener"却漏掉noreferrer→ Referer 头仍会泄露来源 URL,影响隐私
target 的合法值到底有哪些
W3C 和 HTML Living Standard 明确只承认以下五类值:
-
_self:默认行为,当前标签页加载(可省略) -
_blank:唯一推荐用于“新开页”的值 -
_parent:仅在嵌套<iframe></iframe>场景中有效,指向父级上下文 -
_top:跳出所有 iframe 层级,在顶层窗口加载 -
framename:匹配页面中某个<iframe name="xxx"></iframe>,现已极少使用
像 _window、_newtab、new 这类写法,浏览器不会报错,但也不会生效——它们只是被当作自定义窗口名,而由于对应窗口不存在,最终仍 fallback 到 _self。
Vue/React 里写 @#@#@#@#@#@#@#@#@#@0
_blank——用户手机端开一堆标签页后,内存和电池压力是真实存在的真正难的不是写出 target="_blank",而是判断“这个链接到底该不该新开页”,以及确保它新开得干净、安全、可感知。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











