【问题标题】:Accessing the Parent Document from an iFrame in IE [duplicate]从 IE 中的 iFrame 访问父文档 [重复]
【发布时间】:2012-10-18 15:22:28
【问题描述】:

可能重复:
Permission Denied IE iFrame
Access parent document from dynamic iframe using jquery

我正在尝试使用$('#_hf_iFrame', top.document) 从动态<iframe> 子级访问父文档。它适用于 Firefox、Chrome 和 Safari,但 IE 会抛出 Access Denied 异常。

我正在使用以下代码动态创建<iframe>

这个问题是这个问题的延续。我使用以下代码将动态附加到文档中。

var _hf_iFrame = document.createElement("iframe");
_hf_iFrame.setAttribute("id", "_hf_iFrame");
_hf_iFrame.setAttribute("name", "_hf_iFrame");
_hf_iFrame.setAttribute("allow-transparency", true);
_hf_iFrame.setAttribute("style", "height: 354px; width: 445px; border: 0; top: 23%; position: fixed; left:0; overflow: show; background:transparent;");
document.body.appendChild(_hf_iFrame);
_hf_iFrame.setAttribute("src", "javascript:false");

var myContent = '<!DOCTYPE html>'
+ '<html><head><title></title><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script><script type="text/javascript" src="http://somedomain.com/js/core.js"></script></head>'
+ '<body style="margin: 0px;"></body></html>';
_hf_iFrame.contentWindow.document.open('text/html', 'replace');
_hf_iFrame.contentWindow.document.write(myContent);
_hf_iFrame.contentWindow.document.close();

我该如何解决这个问题?

【问题讨论】:

  • 看起来你想问和这里一样的问题:stackoverflow.com/questions/12947122/…。对于给定主题只有一个问题。如果您的其他问题不够清楚(这似乎是个问题),请编辑它。
  • @jfriend00 很抱歉针对同一主题创建多个问题..
  • 看起来可以在这里回答:stackoverflow.com/questions/1886547/…
  • @jfriend00 非常感谢...该链接很有帮助。但是请看我的回答

标签: jquery html iframe


【解决方案1】:

这可能会解决您的问题。

Cross Sub Domain Javascript

<script type="text/javascript">
document.domain = "yourdomain.com";
</script> 

基本上,JS 认为即使是一个子域,例如 img.yourdomain.com 与 www.yourdomain.com 是不同的域。 因此,来自这两个子域的页面之间的 AJAX 不会 工作。此外,如果您有一个从一个到另一个的 iframe,您将不会 能够来回引用 JS 变量或函数。

【讨论】:

  • 我已经更新了我的问题......我希望现在已经清楚了......
【解决方案2】:

我已将代码更改为

//var source = "javascript:void((function(){document.open();document.domain=\'cloudapp.net\';document.close();})())";  
var source = "javascript:false";
var elem = document.createElement("iframe");
elem.frameBorder = "0";
elem.src = source;
elem.style.width = "100%";
elem.style.margin = "0px";
elem.style.padding = "0px";
elem.setAttribute("id", "_hf_iFrame");
document.body.appendChild(elem);

elem.contentWindow.document.open('text/html', 'replace');
elem.contentWindow.document.write(myContent);
elem.contentWindow.document.close();

它适用于所有浏览器...但我仍然找不到奇怪问题的原因。

【讨论】:

    【解决方案3】:

    如果父级和 iframe 都在同一个域上,我认为您可以从 iframe 中获取父级对象。否则子 iframe 或父 iframe 无法相互访问。

    设置域

    document.domain = 'yourdomain.com';
    

    已编辑:

    document.domain 只能设置为subset of the current domain。所以developer.mozilla.org可以设置为mozilla.org,但不能设置为mozilla.com。此属性在某些浏览器中也可能是只读的。

    【讨论】:

    • document.domain 只能设置为当前域的子集。所以developer.mozilla.org可以设置为mozilla.org,但不能设置为mozilla.com。此属性在某些浏览器中也可能是只读的。请参阅here 了解更多信息。
    • @jfriend00 我在两个文档上都设置了document.domain,没有任何错误,alert(document.domain); 反映了相同的情况。但是 IE 仍然会在 $('#_hf_iFrame', top.document) 上中断。
    • @jfriend00 是的,你是对的,我已经更新了我的答案,谢谢
    • @LibinTK 查看更新部分...
    猜你喜欢
    • 2013-10-28
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多