本地开发时Iframe权限被拒绝错误:我的选项是什么?

问题描述:

这里是发生了什么事情:本地开发时Iframe权限被拒绝错误:我的选项是什么?

我有一个应用程序A托管在a.mycompany.com和应用B托管在b.mycompany.com

应用A包括含有应用程序中包含B一个页面的iframe。

<!-- In A's index.html: --> 
<iframe src="http://b.mycompany.com/something.html" > 

我需要父母谈话的iframe或iframe与父母交谈。

它正常工作时,它的服务器上,但是当我在本地深化发展我有不同的端口上运行两个不同的服务器上,所以我必须通过访问他们:

http://a.mycompanydev.com:1234 
http://b.mycompanydev.com:5678 

,这会导致一个安全错误,因为您无法使用JS与来自不同域/子域的iframe或使用不同端口进行通信。

我该怎么办?


相关serverfault问题:https://serverfault.com/questions/148171/how-to-map-localhost8080-to-simply-localhost

您可以使用片段ID的消息,这是一个使用window.location.hash通信的黑客(网址如下#的一部分)。这test page有一个例子。还有诸如Dojo这样的库可以促进这一点。

如果您只需要支持最新的浏览器,则可以使用postMessage

+0

感谢您的回答!你能否详细说明这是什么或如何完成? – marcgg 2010-06-04 12:24:13

+0

这里有个想法 - 代码在一个窗口/ iframe中可以写入(但不能读取)页面上每个其他iframe的位置,即使它属于另一个域。因此,iframe A将通过在#(片段标识符)之后添加一些内容来修改iframe B的url。另一方面,Iframe B将持续监视其URL以识别该消息。我相信有些图书馆可以让你远离血腥的细节,你只需要将它们一网打尽。 – 2010-06-04 12:35:34

+0

如果这是要应用,那么你应该去一个现成熟的解决方案,如easyXDM。它远远超出了Dojo(和任何其他库)的范围。但在这种情况下,我会亲自与代理人进行沟通,这并不难,可以通过简单的脚本来提供。 – 2010-06-04 13:58:34

除了Matthew在上面提到的postMessage和位置哈希,您可能要考虑使用本地运行的代理服务器。代理服务器将侦听端口80,并根据http请求中指定的域名转发到适当的目标端口。然后,您只需在端口80*问您的网站,并且应该正常工作。

+0

代理想法很好,但它需要团队中的每个人都建立这个代理,这是不可接受的... – marcgg 2010-06-04 12:48:46