繁体   English   中英

使用window.open和window.name

[英]using window.open with window.name

浏览器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。

如上面的注释中所建议的,为了使用window.open方法按名称定位窗口,目标窗口必须具有相同的原点并且具有通用的打开器。

镀铬测试:

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

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

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

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

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

不能从多个来源或具有不同打开器的窗口中定位一个公用窗口。 例如,bookmarklet不能使用window.open将postMessage()发送到公共窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM