2014-02-21 32 views
1

我基本上试图显示第二个网站,属于同一个组织,但托管在另一个域名,在iframe中。我试图将一些数据从iframe传递到父框架。如何克服iframe中的同源策略?

父帧= foo.com,

的iFrame = bar.com

如果我试图通过parent.setData(data)从iframe中的数据通过,这给了我一个同源策略错误。

所以我做了解决此代码的包装,在foo.com/js/wrapper.js托管,其中包含此功能:

var Foo = {}; 
Foo.setData = function(data) 
{ 
    parent.setData(data); 
} 

所以现在我对bar.com iframe是这样做的:

<script src="http://foo.com/js/wrapper.js"></script> 
<script> 
    Foo.setData(someData); 
</script> 

然而,即使是在parent.setData行上给我一个安全错误,即使通过wrapper.js托管在父域中。

有没有其他方法可以解决这个问题?

+1

https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage – Quentin

+0

@Quentin任何示例代码的机会? –

+0

该页面上有一个标题为“示例”的整个小节! – Quentin

回答

5

您正在寻找postMessage,在这里读了起来:https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

编辑:对不起,没有看到所有的评论说同样的事情

+0

你的服务器可能不会强制'www',或者你可以从'window.top.location'解析父窗口并将其用作targetOrigin(当然,确保它是您列入白名单的网域) –

1

另一种有趣的方式来解决这个问题的政策是劫持孩子window.location.hash,因为它对两个脚本引擎都是可见的。