
本文系统讲解 HTML 标签 target 属性的作用、合法取值、常见误用及安全规范,重点解决导航按钮意外在新窗口打开的问题,并强调 target="_blank" 必须搭配 rel="noopener noreferrer" 的现代最佳实践。
本文系统讲解 html `` 标签 `target` 属性的作用、合法取值、常见误用及安全规范,重点解决导航按钮意外在新窗口打开的问题,并强调 `target="_blank"` 必须搭配 `rel="noopener noreferrer"` 的现代最佳实践。
在 Web 开发中,target 是 (超链接)和
一、核心取值与行为解析
| 值 | 行为说明 | 使用场景 | 注意事项 |
|---|---|---|---|
| _self(默认) | 在当前标签页/框架内加载,替换当前文档 | 站内导航(如顶部导航栏)、常规页面跳转 | 显式书写 target="_self" 可提升代码可读性,但非必需;若父级存在 |
| _blank | 在新标签页(或新窗口,取决于浏览器设置)中打开 | 外部链接、文档下载、第三方服务跳转 | 必须配合 rel="noopener noreferrer",否则存在 Tabnabbing 安全风险(新页面可通过 window.opener 访问并操控原始页面) |
| _parent | 在直接父 | 嵌套 iframe 结构中的内部导航 | 若当前不在 iframe 内,则等效于 _self;不适用于多层嵌套的“祖父级”跳转 |
| _top | 在最顶层窗口(即移除所有 iframe 框架)中加载 | iframe 页面需“破框”跳出(如登录后跳转至主站首页) | 若页面未被嵌套,效果同 _self |
| 自定义名称(如 "mc") | 在指定名称的 | 复用特定 iframe/窗口承载多个链接内容 | 名称严格区分大小写、不可含空格或特殊字符;匹配失败时行为因浏览器而异(可能降级为 _blank 或 _self) |
⚠️ 你代码中的问题根源正在于此:
<a href="https://www.php.cn/link/5d498aa1f7978898ef8e9c4f87572d37" target="mc">@@##@@</a>你设置了 target="mc",但页面中并未声明 ,也未通过 window.open(..., 'mc') 创建过名为 "mc" 的窗口。因此浏览器无法定位目标上下文,部分浏览器会回退至 _blank 行为(新开标签页),导致导航异常。
二、修复方案:让导航回归当前窗口
✅ 推荐做法(简洁且语义清晰):
直接移除 target 属性,依赖默认 _self 行为:
<a href="https://www.php.cn/link/5d498aa1f7978898ef8e9c4f87572d37">@@##@@</a> <a href="file:%5Epx/Alarms.px">@@##@@</a> <a href="/logout">@@##@@</a>
✅ 显式声明(增强可维护性):
若团队规范要求显式声明目标,可写为:
<a href="https://www.php.cn/link/5d498aa1f7978898ef8e9c4f87572d37" target="_self">@@##@@</a>
❌ 避免无效自定义值:
删除所有无对应上下文的 target="mc" —— 除非你确实在页面中定义了:
<iframe name="mc" src="about:blank" style="display:none;"></iframe>
或通过 JS 动态管理窗口:
window.open('https://www.php.cn/link/5d498aa1f7978898ef8e9c4f87572d37', 'mc');
三、安全与兼容性关键提醒
-
target="_blank" 的强制安全组合:
对外链(尤其是 href 以 http://、https:// 开头的链接),必须使用:<a href="https://example.com" target="_blank" rel="noopener noreferrer">External Link</a>
- noopener:切断 window.opener 引用,杜绝恶意页面劫持;
- noreferrer:阻止 Referer 头泄露来源 URL,增强用户隐私保护;
? 提示:仅写 rel="noreferrer" 而不加 noopener,在旧版 Safari 中仍存在 opener 访问漏洞。
移动端 WebView 兼容性:
某些混合应用 WebView(如 Cordova、Capacitor)默认禁用 _blank,需在配置中启用 allowInlineMediaPlayback 或降级为 window.open() + location.replace()。HTML 版本差异注意:
target 在 HTML 4.01 中被标记为 Deprecated,但在 HTML5 中已正式恢复支持;现代开发可放心使用,无需担忧标准合规性。
四、总结:何时该用 target?
- ✅ 用 _self(或省略):站内导航、表单提交、预期在当前页完成的操作;
- ✅ 用 _blank + rel="noopener noreferrer":跳转至外部网站、PDF 下载、独立工具页;
- ✅ 用 _top:iframe 页面中需强制跳出框架(如登录成功页);
- ❌ 避免滥用 target="xxx":除非明确构建多窗体/多 iframe 应用架构,否则增加维护成本与不确定性。
掌握 target 的本质——它是上下文选择器,而非窗口控制器——能帮你写出更健壮、安全、符合标准的导航逻辑。从今天起,删掉无意义的 target="mc",让链接回归它本该停留的地方:用户的当前焦点。




前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











