target="_self" 是默认行为,不写等价于 _self,在当前页跳转且最轻量;target="_blank" 必须配 rel="noopener noreferrer" 才安全,否则存在劫持风险;非标准值如 blank、_new 均无效且危险。

target="_self" 是默认行为,不写就等于它
不加 target 属性时,浏览器自动按 _self 处理——内容在当前标签页内跳转。这没有额外开销,也不触发跨上下文通信机制,性能上最轻量。
常见误操作:target="self"(漏掉下划线)或 target="SELF"(大小写错误),这些都不是标准值,浏览器会当作普通字符串处理,等效于 _self,但属于冗余写法,且易被代码检查工具报错。
注意:_self 本身不涉及安全风险,因为它不暴露 window.opener,也不传递 Referer 或其他上下文信息。
target="_blank" 必须配 rel="noopener noreferrer"
单独写 target="_blank" 是危险的:新页面能通过 window.opener 直接修改原页面地址、读取 DOM、甚至执行重定向。这不是理论漏洞,真实攻击只需一行 JS:window.opener.location = "https://phishing.example"。
正确写法只有一种可靠组合:rel="noopener noreferrer":
-
noopener切断window.opener引用,防止劫持 -
noreferrer同时抑制 Referer 头发送,避免来源 URL 泄露
漏掉任一字段都算不完整防护:rel="noopener" 单独用仍会发 Referer;rel="noreferrer" 单独用无法阻止 window.opener 访问。
_self 和 _blank 的实际性能差异很小,但影响路径不同
从网络请求和渲染角度看,两者本身无显著性能差距——都是发起一次 HTTP 请求并加载新文档。真正影响体验的是用户行为路径:
-
_self:页面完全替换,历史栈前进/后退正常,内存可及时回收旧页面资源 -
_blank:新开标签页,系统需分配额外进程/内存,尤其在低端设备或标签页过多时可能感知卡顿
滥用 _blank 还会干扰用户预期:内部链接(如“关于我们”“联系我们”)不该强制新开页,打断浏览流;只有可信外部资源(如文档、第三方服务)才适用。
别碰非标准 target 值,比如 blank、new、_new
这些写法看似直观,但全都不合法:
-
target="blank"→ 浏览器当自定义窗口名处理,若该窗口不存在则新建,但后续同名链接会复用它,行为不可控 -
target="_new"或target="new"→ W3C 不承认,所有现代浏览器忽略,降级为_self
验证很简单:打开 DevTools → 点击链接 → 看 Network 面板的 initiator 是否为当前页,或检查新页的 window.opener 是否为 null。不合规写法往往绕过安全约束,也难被自动化测试覆盖。
真正容易被忽略的点是:即使你写了 rel="noopener noreferrer",如果 target 值拼错,整个防护就失效了——浏览器根本不识别那个 target,也就不会启用 opener 隔离逻辑。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











