2013-04-17 39 views
1

我正在做一个应用程序,其中一个窗口需要与另一个窗口交谈,即使它们最初不是来自公共页面。在Chrome中似乎有这样的要求。Chrome浏览器窗口定位没有公共启动关系

这两个窗口来自我控制的同一个域,但可以从书签启动一个,而从Excel工作表启动另一个窗口。

我来到这里演示:

http://cfpreview12.dmclub.net/Frametest/europe.htm

去那个URL(使用Chrome) - 启动法国 - 启动德国 - 点击 “转到巴黎” 和它的工作原理(因为法国和德国有一个共同的推荐人)。

现在复制法国选项卡的URL,关闭选项卡,创建一个新选项卡 手动并粘贴URL。

当你回到德国然后点击“去巴黎”时,会创建一个新选项卡,看起来是因为Chrome没有看到没有共享遗产的窗口之间的关系。

我可以完全控制两个页面(法国和德国),但在真正的 使用,没有这样的事情,欧洲。

解决方法的任何想法?

回答

0

您将无法直接使用target;您必须在每个环境中从JavaScript中进行导航,并在彼此之间的每个不同窗口中从脚本发送消息。

好的,那么当他们没有对window的共享引用时,我们如何在不同的窗口(但相同的域)中获取脚本进行通信?

  1. 老派的方式,写值document.cookie,他们将是可见的在同一个域中的其他窗口的脚本。需要一些恼人的协议开销来轮询Cookie更改,确认收到/删除以及编码长消息(因为Cookie长度有限)。

  2. 使用localStorage取代可用的cookie的同一件事的稍微更好的版本 - 避免污染cookie标头并增加可以放入单个消息的数据长度。

  3. 现代的方式 - 创建一个SharedWorker并从每个窗口与它沟通。不幸的是limited目前的可用性。

如果需要,您当然可以从(3)到(2)回退到(1)。

+0

感谢您的建议。很遗憾,没有办法获得对其他窗口的引用,从而可以将消息发送给他们。我感觉Chrome正在运行一些“保姆状态”;-) –