HTML中a标签target属性有哪些取值含义?
- 内容介绍
- 文章标签
- 相关推荐
本文共计700个文字,预计阅读时间需要3分钟。
target 属性不是用来实现锚点跳转的,它是控制链接在哪里打开的开关。锚点跳转依赖于 href 属性的值。
target="_blank" 必须配 rel="noopener noreferrer"
单独写 target="_blank" 是危险操作,现代浏览器不会阻止它,但会留出攻击面:
- 不加
rel="noopener":新页面能通过window.opener.location把你原来的页面重定向到钓鱼页 - 只加
noopener不加noreferrer:HTTP 请求头仍带Referer,泄露来源 URL - 写成
target="blank"或target="_new":这些都不是标准值,浏览器当无效字符串处理,退化为_self
正确写法只有这一种:<a href="https://example.com" target="_blank" rel="noopener noreferrer">External Link</a>
_self、_parent、_top 这三个值现在还用得上吗
用得上,但场景很窄:
立即学习“前端免费学习笔记(深入)”;
-
_self是默认行为,可省略;显式写出仅用于强调或覆盖父级base标签的target -
_parent和_top只在嵌套<iframe>的老式布局中生效;HTML5 已废弃<frameset>,所以这两个值基本只出现在遗留系统或 iframe 微前端中 - 如果页面没嵌 iframe,
_parent和_top行为等同于_self
能不能自定义 target 名称,比如 target="mywin"
可以,但要小心预期和现实的差距:
- 浏览器会尝试查找名为
mywin的<iframe>或已打开的窗口;找不到就新建一个,名字叫mywin - 后续所有
target="mywin"的链接都会复用这个窗口/标签页——这点常被误认为“分组打开”,其实只是窗口复用 - 该行为未被 HTML Living Standard 明确保证,不同浏览器对窗口复用策略有差异(比如 Chrome 通常复用标签页,Safari 可能新开)
- 现代单页应用(SPA)中几乎不用,因为路由由 JS 控制,不再依赖窗口命名上下文
真正容易被忽略的是:哪怕你只写了一个 target="_blank" 却漏了 rel,CI/CD 流水线里的 Lighthouse 或 axe 扫描工具就会报安全缺陷;这不是“建议”,而是上线前的硬性拦截项。
本文共计700个文字,预计阅读时间需要3分钟。
target 属性不是用来实现锚点跳转的,它是控制链接在哪里打开的开关。锚点跳转依赖于 href 属性的值。
target="_blank" 必须配 rel="noopener noreferrer"
单独写 target="_blank" 是危险操作,现代浏览器不会阻止它,但会留出攻击面:
- 不加
rel="noopener":新页面能通过window.opener.location把你原来的页面重定向到钓鱼页 - 只加
noopener不加noreferrer:HTTP 请求头仍带Referer,泄露来源 URL - 写成
target="blank"或target="_new":这些都不是标准值,浏览器当无效字符串处理,退化为_self
正确写法只有这一种:<a href="https://example.com" target="_blank" rel="noopener noreferrer">External Link</a>
_self、_parent、_top 这三个值现在还用得上吗
用得上,但场景很窄:
立即学习“前端免费学习笔记(深入)”;
-
_self是默认行为,可省略;显式写出仅用于强调或覆盖父级base标签的target -
_parent和_top只在嵌套<iframe>的老式布局中生效;HTML5 已废弃<frameset>,所以这两个值基本只出现在遗留系统或 iframe 微前端中 - 如果页面没嵌 iframe,
_parent和_top行为等同于_self
能不能自定义 target 名称,比如 target="mywin"
可以,但要小心预期和现实的差距:
- 浏览器会尝试查找名为
mywin的<iframe>或已打开的窗口;找不到就新建一个,名字叫mywin - 后续所有
target="mywin"的链接都会复用这个窗口/标签页——这点常被误认为“分组打开”,其实只是窗口复用 - 该行为未被 HTML Living Standard 明确保证,不同浏览器对窗口复用策略有差异(比如 Chrome 通常复用标签页,Safari 可能新开)
- 现代单页应用(SPA)中几乎不用,因为路由由 JS 控制,不再依赖窗口命名上下文
真正容易被忽略的是:哪怕你只写了一个 target="_blank" 却漏了 rel,CI/CD 流水线里的 Lighthouse 或 axe 扫描工具就会报安全缺陷;这不是“建议”,而是上线前的硬性拦截项。

