html标准定义的target值仅有4个:_blank(新标签页)、_self(当前上下文)、_parent(父框架)、_top(顶层上下文),其余如_new、_search等均非标准,会导致不可控行为或被忽略。

HTML 的 target 属性只有 5 个合法取值,其中 4 个是规范定义的保留关键字,1 个是开发者自定义的窗口/框架名——不存在 _new、_search 等“看似合理但实际非标准”的值,用错会导致行为不可控或被现代浏览器忽略。
哪些是 HTML 标准定义的 target 值?
根据 WHATWG HTML Living Standard(截至 2026 年),target 的有效关键字仅限以下 4 个:
-
_blank:强制在新浏览上下文(通常是新标签页)打开,不复用已有窗口;注意它不会继承 opener,且默认开启rel="noopener"安全策略 -
_self:在当前浏览上下文中加载,是默认值,显式写出来通常只为覆盖父级base标签的target -
_parent:在父<iframe></iframe>或框架集的上下文中加载;若无父级,则退化为_self -
_top:在顶层浏览上下文中加载,会打破所有嵌套框架结构;常用于防止被第三方网站iframe套用时保持跳转自由
为什么 _new 或 _search 不该用?
这些不是 HTML 规范值,部分旧文档或 IE 时代资料曾提过 _search,但现代浏览器(Chrome/Firefox/Safari/Edge)完全不支持,使用后行为等同于 _self,且会触发控制台警告(如 Chrome 的 “Invalid target name”):
-
_new是常见误写,实际无效,浏览器按“自定义名称”逻辑尝试查找名为_new的窗口,找不到就新建——但这个新建窗口没有noopener保护,存在安全风险 -
_search仅 IE5–8 实验性支持,已从 HTML5 移除,W3C 文档明确标注为“obsolete” - 任何以
_开头但不在上述 4 个之列的值,都属于未定义行为,不应依赖
自定义 target 名称该怎么用才可靠?
比如 target="myPopup",它的生效前提是目标窗口/框架**已存在且名称匹配**,否则浏览器会新建一个——但这个新建行为不可预测:
- 首次点击会新建窗口,后续同名
target链接会复用该窗口(而非标签页),且窗口尺寸、位置由首次调用决定 - 若用户手动关闭该窗口,下次点击仍会新建,但名字相同,可能被脚本通过
window.open(..., 'myPopup')捕获并复用 - 在单页应用(SPA)中,用自定义名容易和路由历史、PWA 缓存冲突;更稳妥的做法是统一用
_blank+rel="noopener noreferrer" - 注意大小写敏感:
target="MyPopup"和target="mypopup"被视为两个不同窗口
target 在 <a></a> 以外的地方怎么处理?
它也适用于 <area>(图像映射)、<form></form>(表单提交目标)、以及某些 SVG 元素(如 <a></a> in SVG),但规则一致:
-
<form target="_blank"></form>会新开窗口显示响应内容,但若响应是 JSON 或重定向,用户可能看不到结果;更适合搭配responseType: "text"的 JS 提交 -
<area target="sidebar">要求页面中存在<iframe name="sidebar"></iframe>,否则行为退化为_self - 在 Shadow DOM 中,
target仍作用于全局浏览上下文,不受封装限制
真正容易被忽略的是:即使写了 target="_blank",如果页面没加 rel="noopener",新窗口就能通过 window.opener 访问原页面 DOM,这是真实存在的安全漏洞。别只改 target,配套的 rel 属性必须同步加上。











