1

我正在做一个应用程序,其中一个窗口需要与另一个窗口对话,即使它们最初不是来自一个公共页面。Chrome 中似乎有这样的要求。

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

我在这里有一个演示:

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

转到该 URL(使用 Chrome) - 启动法国 - 启动德国 - 单击“前往巴黎”,它可以工作(因为法国和德国有一个共同的推荐人)。

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

然后,当您返回德国并单击“前往巴黎”时,会创建一个新选项卡,这似乎是因为 Chrome 没有看到没有共享遗产的窗口之间的关系。

我可以完全控制这两个页面(法国和德国),但在实际使用中,没有欧洲这样的东西。

关于解决方法的任何想法?

4

1 回答 1

0

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

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

  1. 老式的方式,写入值document.cookie,它们将对同一域中其他窗口上的脚本可见。在轮询 cookie 更改、确认接收/删除和编码长消息(因为 cookie 长度是有限的)时需要一些烦人的协议开销。

  2. 在可用的情况下使用而不是使用 cookie 的同一事物的稍微更好的版本localStorage- 避免污染 cookie 标头并增加可以进入单个消息的数据长度。

  3. 现代方式 - 创建一个SharedWorker并从每个窗口与其通信。不幸的是,目前的可用性有限。

您当然可以根据需要从 (3) 退回到 (2) 到 (1)。

于 2013-04-17T10:37:32.877 回答