在尝试捕捉G +关注按钮的点击事件时,我面临以下问题。
Uncaught SecurityError:无法从'HTMLIFrameElement'中读取'contentDocument'属性:阻止具有原点“https://localhost”的框架访问具有原点“https://apis.google.com”的框架。协议,域和端口必须匹配。
答案 0 :(得分:5)
我发现了类似的讨论Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFram。
当您尝试将ajax调用到另一个域时会触发此问题,请查看此文章以获取有关同源策略的更多信息
要解决此问题,您需要添加此代码
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内容。
<div id="iframecontainer"></div>
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();