来自iframe中子域的JavaScript跨域访问

时间:2015-03-27 05:17:19

标签: javascript cross-domain

父页面位于site.com上。我的页面位于sub.site.com上,该页面将通过iframe包含在父页面中。通过将sub.site.com页面更新为site.com,可以实现https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy。但是,当我尝试这个时,由于相同的原始策略,我仍然会获得访问被拒绝的错

site.com:

<html>
<head></head>
<body><iframe src="http://sub.site.com"/></body>
</html>

sub.site.com:

<html>
<head>
<script>
    function setupPage() {
    try {
        var oldDomain="current iframe domain: ";
        oldDomain = oldDomain.concat(document.domain);
        alert(oldDomain);

        document.domain='sakai.rutgers.edu';
        var newDomain="new iframe domain: ";
        newDomain = newDomain.concat(document.domain);
        alert(newDomain);

        var parentDomain="parent domain: ";
        parentDomain = parentDomain.concat(parent.window.document.domain);
        alert(parentDomain);

    }
    catch (err) {
        var e = "Caught error: ";
        e = e.concat(err.message);
        alert(e);
    }
</script>
</head>
<body onload=setupPage()>
<p>Test Page</p>
</body>

当我加载父页面时,前两个警报显示正在按预期重置域。但是,当脚本尝试访问parent.window.document.domain时,会抛出以下错误(在Chrome中): “捕获错误:阻止具有原点”http://sub.site.com“的帧访问跨源帧。”

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我认为在您可能想要使用的代码中

parentDomain = parentDomain.concat(document.domain); 

而不是

parentDomain = parentDomain.concat(parent.window.document.domain);

在第一种情况下,我猜它可用于当前窗口,因此它将获取文本并连接它。如果您需要访问父窗口,请使用类似

的内容
parent.window.frames.documents............ 

希望有所帮助。我不是大师,但我以前遇到过这种情况,而且这种技术已经解决了这个问题。