window.name是浏览器窗口的字符串标识符,生命周期内跨页面持久存在且支持跨域共享;target是html元素属性,用于指定内容加载目标,其值需与window.name或iframe name严格匹配以复用窗口或框架。

什么是 window.name 和 target 属性?
window.name 是浏览器窗口(或标签页、iframe)的内部标识符,由 JavaScript 设置或读取;而 target 是 HTML 中 <a></a>、<form></form> 等元素的属性,用于指定点击后内容加载到哪个命名窗口/框架。二者配合时,target 的值必须与某个窗口的 window.name 严格匹配(大小写敏感),才能复用该窗口。
如何用 target 打开/复用已命名窗口?
直接在链接或表单中写 target="myWindow",浏览器会查找是否存在 window.name === "myWindow" 的窗口:有则复用,无则新建并自动设名。
- 新窗口不会自动继承原页面的
window.name,需手动设置(如用window.open(url, "myWindow")) -
target="_blank"总是新建匿名窗口,target="_self"或省略target则在当前窗口打开 - 若目标窗口已关闭,再次使用相同
target名会新建一个同名窗口,但旧的window.name引用已失效
用 window.open() 显式控制窗口名称的常见陷阱
window.open(url, name) 的第二个参数就是窗口名,它会同时设置 window.name 并关联到该窗口实例。但要注意:
- 如果
name是空字符串""或含空格/特殊字符(如"my win"),部分浏览器可能忽略或截断,建议只用字母数字和下划线 - 重复调用
window.open(url, "myWindow")且 URL 不同,会复用窗口并导航——这常被误认为“打不开新页”,其实是正常行为 - 在 iframe 内调用
window.open()时,name若与父页面某 iframe 的name属性相同,内容会加载进该 iframe(而非新窗口),这是历史兼容行为,容易混淆
为什么 <iframe name="xxx"></iframe> 会影响 target 路由?
HTML 规范规定:target 不仅匹配顶层窗口名,也匹配同域内 <iframe name="xxx"></iframe> 的 name 属性。这意味着:
- 若页面中有
<iframe name="report"></iframe>,那么<a target="report" href="data.html"></a>会把data.html加载进该 iframe,而不是新开窗口 - 这个行为优先级高于
window.name,即先找同名 iframe,再找同名窗口 - 跨域 iframe 的
name不参与匹配,但同域下极易因命名冲突导致跳转意外落入 iframe
真正难调试的是:你明明没写 window.name = "report",但点了链接却进了 iframe——八成是页面里藏着一个同名 <iframe></iframe>。











