我通过以下方式动态创建IFRAME:
var wrapUpIframe = document.createElement("iframe");
wrapUpIframe.id = 'WrapUpDialog3';
wrapUpIframe.src = 'WrapUpDialog.html';
document.body.appendChild(wrapUpIframe);
动态创建后我的document.domain
从Servername.dc.com
缩短为dc.com
,
但是当我尝试访问contentWindow
时,我收到了拒绝访问错误:
document.getElementById("WrapUpDialog3").contentWindow.SomeFunction();
注意:当我在HTML中静态定义IFRAME时,它可以正常工作
我还试图通过以下方式更改我的IFRAME document.domain
:
WrapUpDialog3.document.domain = dc.com;
我检查了document.domain
和我的IFRAME域,它们都是相同的。
我该怎么办?
我正在使用IE9。
答案 0 :(得分:9)
首先看一下这个post的正确答案。在我看来,这可能是你的问题。
如果不是那样,那么我从另一个post看到的这个快速黑客可能有所帮助。
var frame = $('<iframe>')
.attr('id', 'myIframe')
.addClass('someClass')
.attr('src', 'javascript:(function () {' +'document.open();document.domain=\'myDomain.net\';document.close();' + '})();');
.appendTo($('#someDiv'));
不确定这是否相关,但我也在网上找到了这个link。
好的,所以回复你的评论。 javascript函数没有分配源,它设置的文档域在I.E中显然无法正确完成。
请查看此link以获取其他示例和解释。
所以我想尝试的可能是这样的......
var wrapUpIframe = document.createElement("iframe");
wrapUpIframe.id = 'WrapUpDialog3';
wrapUpIframe.src = setSrc();
document.body.appendChild(wrapUpIframe);
function setSrc(){document.open();document.domain=\'dc.com\';document.close();return 'WrapUpDialog.html';}
在运行设置文档域的函数后,您可能必须使用如何返回iframe的实际url。但从我所看到的情况来看,这可能对你有用。
我有一个类似的问题,但不完全相同的问题,这就是为什么我不能给你一个确切的解决方案。设置文档域的功能是让我超越访问被拒绝的错误。
您还可以将其添加到主文档中,以确保域匹配。
<script type="text/javascript">
document.domain = 'dc.com';
</script>
我还想添加一个link,以便明确设置我之前使用过的document.domain。这对我来说过去很有帮助。特别是这句话......
多尔,你可能有时间问题。我找到了一些我刚刚测试过的代码(这里)。它确保在您尝试访问contentWindow之前加载iframe。明确设置值表示与a“合作”的意图 另一个子域上的脚本(在同一个父域下)。
var iframe = document.createElement("iframe");
iframe.src = "WrapUpDialog.html";
if (iframe.attachEvent){
iframe.attachEvent("onload", function(){
alert("Local iframe is now loaded.");
});
} else {
iframe.onload = function(){
alert("Local iframe is now loaded.");
};
}
document.body.appendChild(iframe);
var iframeWindow = iframe.contentWindow || iframe.contentDocument.parentWindow;
答案 1 :(得分:2)
您如何提供文件?您是否在地址栏中看到file:///
?如果是这样,请尝试使用网络服务器提供代码。
如果我使用file:///
尝试使用您的代码,Google Chrome会出现访问被拒绝错误,但是当它从本地网络服务器提供时(即地址以http://localhost/
开头),它会有效。