ai didi

javascript - iframe contentWindow 在缩短 document.domain 后抛出拒绝访问错误

转载 作者:可可西里 更新时间:2023-11-01 02:38:47 24 4
gpt4 key购买 nike

我通过以下方式动态创建 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 时,我得到了一个 Access is denied 错误:

document.getElementById("WrapUpDialog3").contentWindow.SomeFunction();

注意:当我在 HTML 中静态定义 IFRAME 时,它工作正常。
我还尝试通过以下方式更改我的 IFRAME document.domain:

WrapUpDialog3.document.domain = dc.com;

我检查了 document.domain 和我的 IFRAME 域,它们都是相同的。

我能做什么?

我正在使用 IE9。

最佳答案

先看看这个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 的一些解释。这在过去对我很有帮助。特别是这句话......

Explicitly setting the value indicates intent to "cooperate" with a script on another subdomain (under the same parent domain).

Dor,你可能遇到了时间问题。我发现了一些我刚刚测试过的代码(在这里)对我有用。它确保在您尝试访问 contentWindow 之前加载 iframe。

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;

关于javascript - iframe contentWindow 在缩短 document.domain 后抛出拒绝访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15002168/

24 4 0
文章推荐: http - 在 HTTP/2 中,req/resp、frame 和 TCP packet 之间是什么关系?
文章推荐: java - PKIXCertPathBuilder 使用 Bouncy CaSTLe 提供程序失败但使用默认 (SUN) 提供程序
文章推荐: java - 使用 grpc 和 protobuf 面对 io.netty.util.AttributeKey.valueOf() 方法的 NoSuchMethodError Hello world 示例
文章推荐: javascript - jquery deferred - 等到两个调用完成
可可西里
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com