具有兄弟子域的跨域JavaScript代码

时间:2011-03-03 16:40:49

标签: javascript cross-domain subdomain siblings

我有两个网络应用程序设置:

david .example.com和 john .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是独立的网络应用程序,不能托管在同一个子域中。

2 个答案:

答案 0 :(得分:8)

只要在两个DOM上都设置document.domain,就可以这样做。

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

归功于Martin Jespersen

答案 1 :(得分:-1)

您始终可以使用iframe进行跨域通信,并通过hashbangs发送消息。有关示例,请参阅this。这基本上就像Facebook连接这样的东西。如果一个应用程序打开另一个窗口,我猜你也可以用普通的窗口做到这一点。