在window.name中使用window.open

时间:2013-11-06 20:55:44

标签: javascript window.open

浏览器window.open方法提供了一种按名称访问打开窗口的方法。例如,

窗口A:

window.open('','myWindowName')

这将打开一个带有window.name =='myWindowName'的空白窗口B.然后,

窗口C:

window.open('http://example.com', 'myWindowName')

这将在窗口B中打开example.com。

问题:

如何创建一个名为=='myWindowName'的新窗口,如何设置已打开窗口的名称,以便其他窗口可以使用window.open访问它?使用Chrome时,以下操作无效:

1。在目标窗口中打开以下html

<!DOCTYPE html>
<html>
  <head>
    <script>window.name='myWindowName'</script>
  </head>
  <body>
    target window
  </body>
</html>

在目标窗口中执行window.name现在会生成'myWindowName'

2。从另一个窗口的控制台执行以下js

window.open('http://example.com', 'myWindowName')

上面的代码在一个新窗口(也是window.name'myWindowName')中打开example.com而不是目标窗口。

编辑:

由于某种原因,在chrome中,如果没有内容加载到窗口中,在目标窗口中设置名称将起作用,但是一旦加载了内容,设置window.name就不再影响其他窗口的window.open。

1 个答案:

答案 0 :(得分:0)

正如上面的评论中所建议的,为了使用window.open方法按名称定位窗口,目标窗口必须具有相同的原点并且具有共同的开启者。

chrome test:

1。打开新窗口example.com(或任何网站)

window.name = 'target'
window.was_open = true

2。打开新窗口example.com(或任何网站)

w = window.open('', 'target')
w.was_open //undefined

不知道为什么当在窗口控制台中执行js而不先加载内容时(例如example.com),同样的测试工作原理。

无法从多个来源或具有不同开场白的窗口定位常用窗口。例如,window.open不能被小书签用于postMessage()到公共窗口。