target="_self"是HTML默认行为,即在当前浏览上下文中加载;target="self"无效,target="_parent"用于父级iframe,target="_top"用于顶层窗口,均需严格匹配name属性且仅对标签有效。

target="_self" 是当前框架集内打开的默认行为
不写 target 属性,或显式写成 target="_self",页面就会在当前浏览上下文(即当前 <iframe>、当前标签页或当前窗口)中加载。这不是“特殊技巧”,而是 HTML 规范定义的默认语义——只要没指定其他目标,就复用当前环境。
常见错误是误以为留空 target="" 或写 target="self"(缺下划线)能生效。实际上:
• target="" 被浏览器视为 target="_self",行为正确但冗余;
• target="self" 是非法值,所有主流浏览器都忽略它,退化为 _self;
• target="_SELF" 大小写敏感,无效,同样被忽略。
嵌套 iframe 场景下,target="_parent" 才真正“在父框架集内打开”
如果你的页面嵌在一个 <iframe name="child"> 里,而你想让链接内容加载到它的直接父级(比如包含这个 iframe 的页面),就得用 target="_parent"。它不是“当前框架集”,而是“上一级框架上下文”。
- 父级存在且是普通 HTML 页面 → 在该父页面主体区域加载
- 父级不存在(即已是顶层)→ 行为等同于
_self,仍在当前页加载 - 父级本身也是 iframe → 继续向上找,直到顶层或找到第一个非 iframe 容器
注意:_parent 和 _top 都只对 <a> 标签有效;<button> 加了也无效。
立即学习“前端免费学习笔记(深入)”;
自定义 framename 必须严格匹配 iframe 的 name 属性
想把链接内容精准塞进某个特定 <iframe>,必须同时满足两个条件:
• 页面中存在 <iframe name="myFrame">
• 链接写成 <a href="page.html" target="myFrame">
容易踩的坑:
• iframe 写的是 id="myFrame" 而不是 name="myFrame" → 不匹配
• target="MyFrame" 大小写不一致 → 失效
• iframe 动态插入但 DOM 尚未就绪,链接先点击 → 浏览器会新建窗口并命名,后续同名链接才进该窗口
• 使用 srcdoc 或 sandbox 属性限制了 iframe 的加载能力,导致目标无法响应
现代开发中,_parent/_top 基本只用于 iframe 场景
HTML5 已废弃 <frameset>,所以 _parent 和 _top 不再用于传统 frameset 导航。它们现在唯一的合理用途是:
• target="_top":从深层嵌套的 iframe 中“破框而出”,强制在最外层窗口加载,避免被第三方 iframe 框住
• target="_parent":在微前端或广告嵌入场景中,让子应用跳转影响其宿主容器,而非自己内部
如果页面没有 iframe,这两个值就和 _self 效果一样——别为了“看起来专业”硬加,反而增加维护负担。



















