从iframe中的子域跨域访问JavaScript
父页面位于site.com上。我在sub.site.com上有一个页面,该页面将通过iframe包含在父页面中。为此,应使sub.site.com页面将其域更新为site.com。但是,当我尝试此操作时,由于同源策略,仍然会出现拒绝访问错误 site.com:从iframe中的子域跨域访问JavaScript,javascript,cross-domain,Javascript,Cross Domain,父页面位于site.com上。我在sub.site.com上有一个页面,该页面将通过iframe包含在父页面中。为此,应使sub.site.com页面将其域更新为site.com。但是,当我尝试此操作时,由于同源策略,仍然会出现拒绝访问错误 site.com: <html> <head></head> <body><iframe src="http://sub.site.com"/></body> </html>
<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>
函数设置页(){
试一试{
var oldDomain=“当前iframe域:”;
oldDomain=oldDomain.concat(document.domain);
警报(旧域);
document.domain='sakai.rutgers.edu';
var newDomain=“new iframe domain:”;
newDomain=newDomain.concat(document.domain);
警报(新域);
var parentDomain=“父域:”;
parentDomain=parentDomain.concat(parent.window.document.domain);
警报(父域);
}
捕捉(错误){
var e=“捕获错误:”;
e=e.concat(错误消息);
警报(e);
}
测试页
加载父页面时,前两个警报显示域按预期重置。但是,当脚本尝试访问parent.window.document.domain
时,会抛出以下错误(在Chrome中):
捕获到错误:阻止原点为“”的帧访问跨原点帧
我遗漏了什么?我认为在代码中您可能需要使用
parentDomain = parentDomain.concat(document.domain);
而不是
parentDomain = parentDomain.concat(parent.window.document.domain);
在第一种情况下,我想它对当前窗口可用,因此它将获取文本并连接它
parent.window.frames.documents............
希望这能有所帮助。我自己也不是大师,但我以前遇到过这种情况,这种技术解决了这个问题