target="blank"错误,因缺下划线被当自定义窗口名,无对应窗口时退化为_self;正确写法是target="_blank"且必须配rel="noopener noreferrer"防劫持与隐私泄露。

target="blank" 不好,根本不会按预期工作——它不是合法值,浏览器会把它当作文本窗口名处理,最终行为不可靠。
为什么 target="blank" 是错的
HTML 规范只承认带下划线的保留字:_self、_blank、_parent、_top。漏掉下划线的 target="blank" 会被浏览器视为自定义窗口名(比如叫 “blank” 的窗口),但页面里显然没有预先用 window.open 或 <iframe name="blank"></iframe> 声明过这个名称。
- 结果通常是 fallback 到
_self(当前页跳转),而不是新开标签页 - 部分浏览器可能新建窗口但不加
rel="noopener",带来 opener 安全风险 - 行为不一致:Chrome、Firefox、Safari 对这类非法值的降级策略不同,线上难以预测
target="_blank" 必须配 rel="noopener noreferrer"
即使写对了 target="_blank",单独使用也等于主动打开攻击面。新页面能通过 window.opener.location 把你的原页面重定向到钓鱼页,这是真实被利用的反向 Tabnabbing 攻击。
-
rel="noopener"是底线:切断window.opener引用,现代浏览器(Chrome 49+、Firefox 52+、Safari 10.1+)都支持 -
rel="noreferrer"是补充:阻止 Referer 头泄露来源 URL,旧版 Safari 还需它兜底 opener 隔离 - 顺序无关,但两个必须同时出现;只写
rel="noreferrer"在 Safari 9 等旧环境仍不安全
哪些场景真该用 target="_blank"
不是所有外链都要新开页。滥用 _blank 会打断用户操作流,还增加内存开销。真正适合的只有:
立即学习“前端免费学习笔记(深入)”;
- 站外文档引用(如 MDN、RFC、PDF 原文链接)
- 第三方登录回调地址(如 OAuth 授权页)
- 独立工具类页面(如在线 JSON 格式化器、SVG 编辑器)
- 表单导出响应(
<form target="_blank">,且后端返回可直接展示的 HTML/PDF)
站内路由(如 /help、/settings)一律用默认行为或显式 target="_self",否则 SPA 路由状态会丢失。
iframe 和框架页里 target 更容易踩坑
在嵌套环境中,target="_blank" 依然在顶层新开标签页,但 target="_parent" 和 target="_top" 才影响框架层级。常见误判:
- 想“跳出 iframe”却写了
target="_blank"→ 实际只是新开页,没破框 - 用了
target="_parent"但当前不在 iframe 里 → 退化为_self,无报错但效果不符预期 -
<iframe name="myFrame"></iframe>+target="myframe"(大小写不匹配)→ 匹配失败,fallback 行为因浏览器而异
真正要彻底跳出所有嵌套,得用 target="_top",而且必须确保目标页面没被 sandbox 限制(如 sandbox="allow-scripts" 缺失时,_blank 可能被静默忽略)。



















