# 内嵌页面跨域报错
# 背景介绍:
因客户需求,客开将门户页面 ehrtg.yintai-centre.com 使用iframe内嵌到客户的页面 portalt.yintai-centre.com 中。
# 报错信息:
Uncaught DOMException: Blocked a frame with origin "https://xxxxx.com" from accessing a cross-origin frame
注: IE的控制台上可能报“拒绝访问”
# 触发点:
发现门户中的iframe在使用 parent.vPortal 时会报错,只要是调用parent上的方法、属性等,都会报错。
# 排查步骤:
门户 ehrtg.xxx-centre.com 是使用iframe内嵌到客户网页 portalt.xxx-centre.com 中, 将门户页面使用浏览器直接打开,发现问题仍然存在。
因发生点位置是门户页面中的一个iframe, 在门户中使用iframe打开其它页面,然后在iframe中测试调用parent上的方法,发现内嵌的iframe,只要调用parent,就会触发跨域问题。
排查门户页面(top)的 document.domain 与 iframe中页面的 document.domain,发现前者为xxx-centre.com ,后者为 ehrtg.xxx-centre.com 。两者在二级域名有差异,怀疑问题点在这里,继续排查。
手动将门户页面(top)的 document.domain 设置成 ehrtg.xxx-centre.com 后, 在iframe中调用 parent.vPortal 不再报错,定位到问题点。
因当前地址栏中的地址为 htts://ehrtg.xxx-centre.com , iframe中的地址为相对路径,且iframe的document.domain与地址栏中的域名一致,判断问题点在门户(top)的 document.domain。
排查门户的doc, 发现在head中,有对document.domain进行赋值。使用overrides进行覆盖测试, 将下图中的代码注释掉后, iframe能正常访问parent中的方法,问题排查完成。
# 总结:
如果各方面跨域相关配置完成,门户页面能正常渲染的情况下,发现门户内嵌iframe无法正常显示,一直报跨域问题, 优先排查门户页面是否更改了"document.domain"
← 常见栏目刷新方法 收到消息无法正常刷新栏目 →
