using window.open with window.name
浏览器的 window.open 方法提供了一种按名称访问打开的窗口的方法。例如,
窗口 A:
1 | window.open('','myWindowName') |
这将打开一个带有 window.name == \\'myWindowName\\' 的空白窗口 B。那么,
窗口 C:
1 | window.open('http://example.com', 'myWindowName') |
这将在窗口 B 中打开 example.com。
问题:
我如何设置一个已经打开的窗口的名称,以便其他窗口可以使用 window.open 访问它,而不是创建一个名称 == \\'myWindowName\\' 的新窗口?使用 Chrome,以下操作不起作用:
1.在目标窗口打开如下html
1 2 3 4 5 6 7 8 9 | <!DOCTYPE html> <html> <head> window.name='myWindowName' </head> <body> target window </body> </html> |
在目标窗口中执行 window.name 现在会产生 \\'myWindowName\\'
2.从另一个窗口的控制台执行以下js
1 | window.open('http://example.com', 'myWindowName') |
上面的代码在新窗口中打开 example.com(也带有 window.name \\'myWindowName\\')而不是目标窗口。
编辑:
由于某种原因,在chrome中,如果没有内容加载到窗口中,在目标窗口中设置名称将起作用,但是一旦加载内容,设置window.name不再影响其他窗口的window.open。 正如上面评论中所建议的,为了使用 window.open 方法按名称定位窗口,目标窗口必须具有相同的来源并且具有共同的开启器。 镀铬测试: 1.打开新窗口example.com(或任何网站) 2.打开新窗口example.com(或任何网站) 不知道为什么当js在窗口控制台中执行而不首先加载内容(如example.com)时相同的测试有效。 不能从多个来源或具有不同开启器的窗口定位一个公共窗口。例如,小书签不能使用 window.open 将
2
window.was_open = true
2
w.was_open //undefined