能否通过JS设置window.name实现跨页面target跳转?
问题解答
第一个方案可行吗?
不行,这里得先分清两个完全不同的概念:
<a>标签的target属性对应的是浏览器窗口/标签页的标识名称——这个名称是窗口被打开时指定的(比如用window.open(url, "窗口名"),或是<a target="窗口名">打开新窗口时),属于浏览器层面的标识。window.name是当前页面的DOM属性,它确实能跨域保留,但和浏览器窗口的标识名称完全不搭边。
所以你在foo.example.com的窗口里执行window.name='HERE';,根本不会把这个窗口的浏览器标识名改成HERE。bar.example.com页面里的<a href='foo.example.com' target='HERE'>GOFOO</a>,只会去查找浏览器里标识名为HERE的窗口,找不到就直接新开一个,这个方案根本不生效。
能找回未通过target初始命名的窗口吗?
基本没辙,原因如下:
- 未命名的窗口(比如手动打开的、用
target="_blank"没指定名称的),浏览器不会给它分配固定可复用的标识名,没法通过target或其他方式直接定位到它。 - 如果是你自己的页面用
window.open打开的未命名窗口,只有在打开时保存了返回的窗口引用(比如let myWin = window.open(url)),才能在同域下操作这个引用;但要是没保存引用,或者跨域了,完全拿不到任何能定位它的途径。 - 要是用户手动打开的窗口,连
opener关联关系都没有,更是彻底没法找回。
内容的提问来源于stack exchange,提问作者Don
相关产品推荐
相关产品推荐

