target="_blank"必须配rel="noopener noreferrer",否则新页面可通过window.opener劫持原页;\_parent/\_top仅在iframe嵌套中有效;自定义target名行为不可控,非标准写法均退化为\_self。

target="_blank" 必须配 rel="noopener noreferrer"
单独写 target="_blank" 是危险操作,不是“功能不全”,而是直接留后门。新页面能通过 window.opener 读取甚至跳转原始页面,常见攻击如自动重定向到钓鱼页。
正确写法只有一种主流组合:target="_blank" rel="noopener noreferrer"。其中:
-
noopener是安全底线,禁用window.opener引用 -
noreferrer是隐私补充,阻止 Referer 头泄露来源 URL - 漏掉引号、写成
target="blank"或target="_new"都无效,浏览器当普通字符串处理,退化为_self
为什么 _parent 和 _top 现在很少见
这两个值只在嵌套 场景下有意义,而现代网页几乎不用 frameset 或多层 iframe 布局。它们的行为差异很具体:
-
target="_parent":找直接父级上下文;若当前不在 iframe 中,就等同于_self -
target="_top":强制跳出所有 iframe 层级,加载到顶层窗口;常用于防被第三方网站 iframe 套壳 - 在单页应用(SPA)里误用
_parent可能导致路由失效或白屏,因为框架上下文和 JS 路由历史不匹配
自定义 target 名(如 target="myPopup")的实际表现
它不是“打开新标签页”,而是“按窗口名复用或新建窗口”,行为受首次调用决定,且不可控:
- 第一次点击:浏览器新建一个**独立窗口**(非标签页),尺寸位置由浏览器默认或系统设置决定
- 后续同名点击:复用该窗口,不会新开,也不会聚焦已最小化的窗口
- 用户手动关闭该窗口后,下次点击仍会新建,但名字相同,可能被脚本用
window.open('', 'myPopup')捕获 - 大小写敏感:
target="MyPopup"和target="mypopup"是两个不同窗口
别踩这些坑:非标准值和语法错误
像 target="_new"、target="new"、target="_search" 这些写法,浏览器不会报错,但也不会按你预期执行——它们只是被当作自定义窗口名,而由于对应窗口不存在,最终 fallback 到 _self。
更隐蔽的问题是语法细节:
- 引号缺失:
target=_blank是非法 HTML,某些解析器会忽略整个属性 - 中文下划线或短横线:
target="_blank"(全角)或target="-blank"完全无效 - 空格混入:
target="_blank "(末尾空格)在部分旧环境会被截断,变成空值,等效_self
实际开发中,真正需要反复确认的只有两点:是否对外链用了 target="_blank" rel="noopener noreferrer",以及是否把 _parent 或 _top 用在了有真实 iframe 嵌套的场景里。其余情况,_self 就够用。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











