target属性是html中控制链接或表单响应显示位置的关键属性,取值包括_blank(新窗口)、_self(当前窗口,默认)、_parent(父框架)、_top(顶层窗口)和自定义framename;其中_parent和_top仅在存在嵌套iframe或frameset时生效,否则退化为_self,且_top可被sandbox策略限制,命名iframe配合target可实现无刷新提交。

target 属性在多框架页面中不是“可选技巧”,而是决定响应是否留在子框架、跳出到父级或全屏的关键开关。它只在页面含 <iframe></iframe> 或旧式 <frame> 时才显现出不可替代的作用。
target="_parent" 和 target="_top" 的实际触发条件
这两个值只有在当前页面确实被嵌套(即存在上层 <iframe></iframe> 或 <frameset></frameset>)时才生效;否则行为退化为 _self。比如你本地开发时直接打开 HTML 文件,target="_parent" 不会报错,但也不会跳出去——因为根本没父上下文。
-
target="_parent":只向上跳一级。若表单在三层嵌套的<iframe></iframe>中,它只回到第二层,不会直达顶层 -
target="_top":强制打破所有嵌套,把响应载入最外层window。适合“退出编辑态”类操作,比如 CMS 后台的“返回首页”提交按钮 - 若父框架设置了
sandbox属性(如sandbox="allow-scripts"),且未包含allow-top-navigation,则_top可能被浏览器静默忽略
用命名 iframe 实现无刷新提交 + 页面状态保留
给 <iframe name="submit-handler"></iframe> 设定唯一名称,再让表单 target="submit-handler",就能把服务器响应悄悄载入该 iframe,主页面完全不动。这是纯 HTML 实现“伪 AJAX”的老办法,至今在某些内网系统或低配终端上仍有实用价值。
- iframe 必须有
name属性,不能只靠id;name="xyz"和target="xyz"必须严格一致(大小写敏感) - 服务端响应应为完整 HTML 页面(含
),否则可能触发下载或解析失败;若只想返回 JSON,需额外用 JS 监听load事件并读取contentDocument - iframe 高度不会自动适应内容,需配合
height: 0; min-height: 100px;和 JS 调整,否则留白或截断
formtarget 覆盖 target 时的兼容性陷阱
当表单本身设了 target="_parent",而某个按钮加了 formtarget="_blank",理论上新标签页打开——但 IE9 及更早版本根本不识别 formtarget,会无视它,直接走 form 的 target。这不是 bug,是标准支持缺失。
- Chrome/Firefox/Edge 84+、Safari 15.4+ 均完整支持
formtarget,但 Safari 在 iOS 15.6 之前对_blank有弹窗拦截倾向(尤其非用户手势触发时) -
formtarget只对<button type="submit"></button>和<input type="submit">生效;<button></button>默认是type="submit",但某些旧版 WebKit 会按type="button"处理,务必显式声明 - 若后端返回的是重定向(
302),目标窗口由重定向响应头的Location决定,target或formtarget仅控制初始请求的承载容器
真正容易被忽略的点是:框架嵌套层级一旦超过两层,_parent 和 _top 的行为差异会变得非常隐蔽——你得真正在嵌套 iframe 环境里点几次才能确认它到底停在哪一层。不要依赖本地预览,得部署到真实嵌套路径下验证。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











