【问题标题】:using window.open with window.name使用 window.open 和 window.name
【发布时间】:2013-11-08 00:58:20
【问题描述】:

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

窗口 A:

window.open('','myWindowName')

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

窗口 C:

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

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

问题:

我如何设置一个已经打开的窗口的名称,以便其他窗口可以使用 window.open 访问它,而不是创建一个名称 == 'myWindowName' 的新窗口?使用 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')

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

编辑:

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

【问题讨论】:

  • 你用的是什么浏览器?我刚刚在 Chrome 中尝试过,它的工作方式与您预期的一样:两个标签,window.name = 'window1'; 合二为一; window.open('http://example.com', 'window1'); 在另一个选项卡中打开“example.com”,而不是新选项卡。这也适用于单独的窗口而不是选项卡。
  • 似乎可以在 Firefox 中使用。
  • 有效。 jsfiddle.net/C5pFg
  • 从空白 chrome 控制台执行所有 js 时,不会出现此问题。感谢您指出这一点,抱歉我的测试没有出现。将编辑问题,以便更容易重现问题。
  • 安全原因。窗口离开您的域后,您将失去对其的任何控制,并且无法读取或设置其任何属性,就像&lt;iframe&gt; 一样。 (除了可能关闭它)

标签: javascript window.open


【解决方案1】:

如上面的 cmets 中所建议的,为了使用 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)时相同的测试有效。

不能从多个来源或具有不同开启器的窗口定位一个公共窗口。例如,window.open 不能被小书签用来postMessage() 到一个公共窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多