【问题标题】:How to overcome same-origin-policy from iframe?如何克服 iframe 的同源策略?
【发布时间】:2014-03-23 08:05:12
【问题描述】:

我基本上是在尝试在 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 托管在父域上。

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

【问题讨论】:

标签: javascript iframe same-origin-policy


【解决方案1】:

绕过此策略的另一种有趣方法是劫持子 window.location.hash,因为它对两个脚本引擎也是可见的。

【讨论】:

    【解决方案2】:

    您正在寻找postMessage,请在此处阅读:https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

    编辑:抱歉,没有看到所有的 cmets 都说同样的话

    【讨论】:

    • 您的服务器可以强制不使用www,或者您可以从window.top.location 解析父窗口并将其用作targetOrigin(当然要确保它是您的白名单域之一)
    猜你喜欢
    • 2012-08-12
    • 2011-07-20
    • 1970-01-01
    • 2013-05-15
    • 2016-11-13
    • 2012-07-10
    • 1970-01-01
    • 2017-12-27
    • 2014-01-23
    相关资源
    最近更新 更多