target=”_blank”需搭配rel=”noopener noreferrer”防安全风险;_self、_parent、_top用于复用上下文但范围不同;自定义名称可复用窗口;form也支持target,适用于导出等场景。
target=”_blank” 是最常用的新开窗口方式,但默认有安全风险
点击链接后在新标签页打开页面,用 target="_blank" 就行。但现代浏览器下,它会默认继承当前页面的 window.opener 引用,导致新页面能通过 window.opener.location 反向控制原页面——这是钓鱼和跳转劫持的常见入口。
安全写法必须搭配 rel="noopener noreferrer":
<a href="https://example.com" target="_blank" rel="noopener noreferrer">外部链接</a>
-
rel="noopener"切断window.opener引用,防止新页篡改原页 -
rel="noreferrer"还会隐藏Referer头(可选,但推荐加) - 不加
rel="noopener"时,Chrome/Firefox 已在控制台警告
target=”_self”、”_parent”、”_top” 的实际行为差异
这几个值都用于**复用已有上下文**,但作用范围不同:
-
target="_self":在当前<iframe></iframe>或标签页内跳转(默认值,可省略) -
target="_parent":在父级<iframe></iframe>中加载,若无父级则等同于_self -
target="_top":在顶层窗口(即最外层浏览器标签页)加载,会“跳出”所有嵌套<iframe></iframe>
特别注意:_parent 和 _top 在单页应用或嵌入式场景中容易引发意外跳转,比如广告 iframe 里用了 target="_top",就可能让整个宿主页面被替换成广告落地页。