target属性控制链接打开的浏览上下文而非创建新窗口;常用值包括_self、_blank(需配rel="noopener noreferrer"防安全风险)、_parent、_top及自定义名(复用或新建);移动端WebView可能禁用_target="_blank"_需配置或降级处理。

target 属性不是“设\_跳转窗口”的开关,而是控制链接在哪个浏览上下文中打开——它本身不创建新窗口,只告诉浏览器“去哪打开”。值写错、漏写引号、或和 rel="noopener" 搭配不当,都可能引发安全或行为异常。
target 常用值及对应行为
浏览器对 target 的处理依赖于上下文(是否同源、是否被 sandbox 限制等),但以下值是标准且广泛支持的:
-
_self:默认值,在当前标签页/框架内打开(显式写出来可提高可读性) -
_blank:在新标签页(或新窗口,取决于浏览器设置)打开 -
_parent:在父的上下文中打开(仅嵌套 iframe 时有效) -
_top:在整个顶层窗口中打开,用于跳出所有 iframe - 自定义名字(如
"myWindow"):复用已有命名窗口/标签页;若不存在则新建
必须加 rel="noopener" 才能安全用 target="_blank"
直接写 会让新页面通过 window.opener 访问原页面的 window 对象,存在安全风险(如钓鱼跳转、性能拖累)。现代实践强制要求搭配 rel="noopener"(推荐再加 noreferrer):
外部链接
注意:rel="noopener" 在 Chrome 49+、Firefox 52+、Safari 12.1+ 中生效;旧版 Safari 需要 rel="noreferrer" 才能真正切断 opener。
立即学习“前端免费学习笔记(深入)”;
target 自定义名称的实际效果容易被误解
给 target 赋一个字符串(如 "dashboard")并不等于“每次点都开新窗口”,而是“找叫 dashboard 的窗口,有就复用,没有才新建”:
- 第一次点击:
→ 新建名为dashboard的窗口/标签页 - 第二次点击同一
target的链接:→ 复用已有dashboard标签页,覆盖加载 - 不同页面上用了相同
target名,也会跨页面共享该窗口
这种复用行为在单页应用或后台系统里有时有用,但多数场景下不如 _blank 直观可控。
移动端和 WebView 中 target="_blank" 可能不工作
部分 Android WebView 或 iOS WKWebView 默认禁用新窗口弹出,即使写了 target="_blank",链接也可能静默失败或仍在当前页打开。解决方法包括:
- 确保 WebView 启用了
setJavaScriptCanOpenWindowsAutomatically(true)(Android) - iOS 需在
WKWebViewConfiguration中设置preferences.javaScriptCanOpenWindowsAutomatically = true - 降级方案:改用 JavaScript
window.open()并手动处理兼容性
真正在生产环境用 target,得先确认运行容器是否允许弹窗——这点比语法正确更重要。











