我在http://domain1/app1/called.html中有一个网络应用,我想在http://domain2/app2/caller.html中使用iframe(或弹出窗口,它是相同的)嵌入该应用程序
用户应该能够与called.html交互,直到他们按下某个按钮,在这种情况下我需要告诉caller.html用户从called.html中选择了一个项目
我尝试用javascript实现它。
在called.html中我在json中编码数据,然后在caller.html中执行“called_callback”javascript函数,将json作为参数传递。
如果用弹出窗口调用了called.html,我发出window.opener.called_callback(jsonData),如果它是iframe,我只发出parent.called_callback(jsonData)
在同一个域中使用caller.html和called.html一切正常,但是从不同的域我得到以下错误:
permission denied (on IE6)
和
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)
是否有可能克服这一限制?
你能想到实现它的其他方式???
我猜caller.html可以实现一个Web服务,我可以发送调用它的结果,但是页面caller.html必须轮询才能检测到任何更改......
那么一个应用程序如何与另一个域中的另一个应用程序通信以发出事件信号???
答案 0 :(得分:4)
您可以使用JSONP将资源从一个域调用到另一个域。
您可以在旧版浏览器的跨域框架之间使用window.name作为~2Mb文本传输。
或者对于现代浏览器,您可以使用window.postMessage在2帧之间传递字符串数据。
但是你需要来自各个领域的合作才能使这些技术发挥作用。
答案 1 :(得分:1)
答案 2 :(得分:1)
由于这两个答案,我发现了以下内容:
http://benalman.com/code/projects/jquery-postmessage/docs/files/jquery-ba-postmessage-js.html
http://benalman.com/projects/jquery-postmessage-plugin/
jQuery postMessage支持简单和 easy window.postMessage通讯 在支持它的浏览器中(FF3, Safari 4,IE8),同时回归 document.location.hash通信 所有其他浏览器的方法(IE6, IE7,Opera)。
随着加入 window.postMessage方法,JavaScript 终于有一个梦幻般的手段 跨域框架通信。 不幸的是,这种方法不是 在所有浏览器中都支持一个例子 这个插件有用的地方是a 子iframe需要告诉其父母 其内容已调整大小。
我会看看它......
答案 3 :(得分:0)
这是一份非常完整的文件,分析了不同的方法......
http://softwareas.com/cross-domain-communication-with-iframes
另一个解决方案,看看
带样品
http://easyxdm.net/wp/2010/03/17/setting-up-your-first-socket/