我目前正在尝试将Web应用程序(ConnectWise)包装到我公司的中央Intranet站点中。在大多数情况下,这是一个相当简单的过程;创建一个包含iframe的包含页面,将iframe指向ConnectWise网址。这部分几乎适用于所有功能。
问题出现在应用程序的某些选择功能(在这种情况下,创建时间表条目的过程的一部分),这根本无法工作。 Chrome提供以下控制台输出。
Uncaught SecurityError: Failed to read the 'frame' property from 'Window': Blocked a frame with origin "https://app.example.com" from accessing a frame with origin "https://host.example.com". Protocols, domains, and ports must match.
我知道这是由跨站点和同源策略的安全选项引起的。鉴于以下几点,有没有办法克服这个问题?
https://host.example.com
进行了完全控制
https://app.example.com
的部分控制
我尝试在每台服务器上设置Access-Control-Allow-Origin
,到目前为止,这是我遇到的唯一一种无法更改应用服务器文件内容的方法。在给出
*
时https://app.example.com
或https://host.example.com
在*
https://host.example.com
或https://app.example.com
修改
this "duplicate" question的解决方案不适用于此处。我不有权更改iframed页面(app.example.com
)的文件内容(包括javascript)。此外,需要运行权限的脚本是iframe中的页面,而不是托管iframe的页面。
答案 0 :(得分:1)
不,这是不可能的。
Access-Control-Allow-Origin
主要影响从HTTP请求获取原始数据,而非实时DOM。
postMessage
可以让不同来源的帧进行通信,但它需要在两个页面上都包含JS。
答案 1 :(得分:1)
Access-Control-Allow-Origin
之类的CORS标头只影响AJAX请求,而不影响DOM访问。
但是,如果它们位于同一个域但位于不同的子域中,则可以在每个页面上包含以下内容:
document.domain = 'example.com';
如果同时设置了一个文档,则允许访问另一个文档 document.domain为相同的值,表示其意图 合作
如果app.example.com
有任何script
包含在host.example.com
,那么您可以将上述代码放在这些脚本中以设置域。
e.g。
<script src="https://host.example.com/setup.js"></script>