5

我有两个 Web 应用程序设置:

大卫.example.com 和约翰.example.com

大卫向约翰打开了一个新窗口:

window.open('john.example.com');

John 现在想在 David 上设置一个输入元素:

$("#input", window.opener.document).val("Hello David.");

我的问题是,由于跨域脚本安全性,这在大多数现代浏览器上都不起作用。我还尝试document.domain在 David 和 John 上设置不同的域组合,但没有成功。

唯一有效的情况是,如果 John 处于开启状态example.com并且两者都document.domain设置为example.com。但是,example.com它是我们的主要网站,不能作为解决方案使用。

那么有没有一种方法可以在使解决方案在所有具有安全意识的现代浏览器中运行的同时完成上述示例?

笔记

  • 我控制example.com及其所有子域。
  • David 和 John 是独立的 Web 应用程序,不能托管在同一个子域上。
4

2 回答 2

8

只要您在两个 DOM 上都设置了 document.domain,您应该能够做到这一点。

document.domain = location.host.replace(/^.*?([^.]+\.[^.]+)$/g,'$1');

归功于 Martin Jespersen

于 2011-03-03T16:45:53.970 回答
-1

您始终可以使用 iframe 进行跨域通信并通过 hashbangs 发送消息。请参阅示例。它基本上是 Facebook 连接之类的东西的工作原理。如果一个应用程序打开另一个窗口,我猜你也可以使用普通窗口来做到这一点。

于 2011-03-03T16:43:57.013 回答