Javascript 在两个站点之间实现回调-在两个站点之间通信

Javascript 在两个站点之间实现回调-在两个站点之间通信,javascript,html,webservice-client,Javascript,Html,Webservice Client,我在中有一个web应用程序,我想在其中嵌入一个iframe(或者一个弹出窗口,都是一样的) 用户应该能够与called.html交互,直到他们按下某个按钮,在这种情况下,我需要告诉caller.html用户从called.html中选择了一个项目 我试着用javascript实现它 在called.html中,我用json编码数据,然后在caller.html中执行“called_callback”javascript函数,将json作为参数传递 如果通过弹出窗口调用called.html,我将

我在中有一个web应用程序,我想在其中嵌入一个iframe(或者一个弹出窗口,都是一样的)

用户应该能够与called.html交互,直到他们按下某个按钮,在这种情况下,我需要告诉caller.html用户从called.html中选择了一个项目

我试着用javascript实现它

在called.html中,我用json编码数据,然后在caller.html中执行“called_callback”javascript函数,将json作为参数传递

如果通过弹出窗口调用called.html,我将发出window.opener.called_回调(jsonData),如果是iframe,我将发出parent.called_回调(jsonData)

将caller.html和called.html放在同一个域中,一切正常,但在不同的域中,我会遇到以下错误:

permission denied (on IE6)

有可能克服这个限制吗

你还能想到其他什么方法来实现它

我想caller.html可以实现一个web服务,我可以发送调用它的结果,但是页面caller.html必须进行轮询才能检测到任何更改


那么,一个应用程序如何与不同域中的另一个应用程序通信以发出事件信号呢?

您应该考虑使用。如果您使用的是特定的框架,那么它在中完全受支持。它允许您跨域使用JSON。

您可以使用它从一个域调用资源到另一个域

对于较旧的浏览器,您可以在跨域帧之间使用约2Mb的文本传输

或者,对于现代浏览器,您可以使用它在两个帧之间传递字符串数据


但要使这些技术发挥作用,您需要各领域的合作。

多亏了这两个答案,我发现了以下几点:

jQuery postMessage支持简单和 easy window.postMessage通信 在支持它的浏览器中(FF3, Safari 4,IE8),同时返回到 document.location.hash通信 方法用于所有其他浏览器(IE6, IE7,歌剧院)

加上 window.postMessage方法,JavaScript 终于有了一个奇妙的方法 跨域帧通信。 不幸的是,这种方法并不适用 在所有浏览器中都支持。一个例子 当 子Iframe需要告诉其父级 其内容已调整大小


我会看一看…

这里有一个非常完整的文档,分析了不同的方法

另一个解决方案可以看一下

带样品


你拥有域1和域2吗?是的,一个应用程序是我的,另一个来自与我们合作的团队…
postMessage
不限于字符串数据。该标准允许使用各种对象和
ImageData
数组。另外,在某些现代浏览器中,使用
window.name
已不再有效。@Eli,您确定使用
postMessage
可以普遍使用非字符串数据吗?JSON会很好。。。对于
window.name
,这是一种黑客行为;)正是针对较旧的浏览器。@Eli,嗯,自从上次我检查以来,似乎已经在这方面做了一些工作,似乎现在它允许任何可以克隆的东西,我的浏览器对不同的方法有了更好的解释-它基于easyXDM的内部结构。
Unsafe JavaScript attempt to access frame with URL [..]/caller.html from frame with URL [...]called.html. Domains, protocols and ports must match. (on google chrome)