Uncaught SecurityError:无法从'HTMLIFrameElement'读取'contentDocument'属性:阻止了一个源为“https:// localhost”的帧

时间:2015-02-02 07:30:35

标签: javascript securityexception

在尝试捕捉G +关注按钮的点击事件时,我面临以下问题。

Uncaught SecurityError:无法从'HTMLIFrameElement'中读取'contentDocument'属性:阻止具有原点“https://localhost”的框架访问具有原点“https://apis.google.com”的框架。协议,域和端口必须匹配。

2 个答案:

答案 0 :(得分:5)

我发现了类似的讨论Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFram

  

当您尝试将ajax调用到另一个域时会触发此问题,请查看此文章以获取有关同源策略的更多信息

Mozilla's Same Origin article

  

要解决此问题,您需要添加此代码

document.domain = 'yourdomain.com'

来自文章本身:

  

页面可能会因某些限制而改变自己的来源。脚本可以将document.domain的值设置为当前域的子集。如果它这样做,则较短的域用于后续的原始检查。例如,假设http://store.company.com/dir/other.html文档中的脚本执行以下语句:

document.domain = "company.com";
  

执行该语句后,页面将通过http://company.com/dir/page.html传递原点检查。但是,由于同样的原因,company.com无法将document.domain设置为othercompany.com。

     

端口号由浏览器单独保存。对setter的任何调用,包括document.domain = document.domain都会导致端口号被null覆盖。因此,只有设置document.domain =" company.com"才能使company.com:8080与company.com交谈。在第一个。必须在两者中设置它以使端口号都为空。

答案 1 :(得分:0)

我的解决方案重建iframe并可在角度中使用。 当我们构造iframe时,它需要原始安全检查来修改iframe内容。此解决方案允许我们多次重新创建iframe内容。

HTML

<div id="iframecontainer"></div>

JS

var content = "<h1>Content inside Iframe</h1>"; //desired content of iframe
var iframecontainer = document.getElementById("iframecontainer");
iframecontainer.innerHTML ='<iframe id="threedsframe" width="%90" height="400px"></iframe>';
var iframe = iframecontainer.childNodes[0];
let doc =  iframe.contentDocument || iframe.contentWindow;
doc.open();
doc.write(content);
doc.close();