2015-07-20 32 views
1

我目前正试图包装一个Web应用程序(ConnectWise)以包含在我公司的中央Intranet站点中。这是一个相当简单的过程,使用iframe创建一个包含页面,将该iframe指向ConnectWise url。这部分适用于几乎所有的功能。允许子域之间的跨站点请求而不更改第二个子域的文件内容

问题出现在应用程序的某些选择功能(在这种情况下,创建时间表条目的过程的一部分),它只是无法正常工作。 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
    • 可以改变HTML,JavaScript和文件内容
    • 可以改变IIS设置和标题
  • 我有部分控制 o版本https://app.example.com
    • 不能改变HTML,JavaScript和文件内容
    • 可以改变IIS设置和标题。

我已经试过每个服务器,迄今是唯一的方法,我遇到不涉及能够更改文件内容的应用程序服务器上设置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

看到我的答案张贴在: [http://stackoverflow.com/questions/31232348/get-data-out-of-json-array-from-external-url/31237694#31237694 ] [1] [1]:http://stackoverflow.com/questions/31232348/get-data-out-of-json-array-from-external-url/31237694#31237694 –

回答

1

CORS头文件如Access-Control-Allow-Origin只影响AJAX请求,而不影响DOM访问。

然而,如果他们都在同一个域,但不同的子域,那么你可以包括每一页上执行以下操作:

document.domain = 'example.com'; 

From MDN

一个文档允许,如果访问另一个他们同时设置了 document.do10到相同的值,表明他们的意图 合作

如果app.example.com有任何script包括host.example.com那么你可以把上面的代码放在这些脚本来设置域。

例如

<script src="https://host.example.com/setup.js"></script> 
+0

这似乎要走的路。虽然我无法直接控制“应用”页面上的任何脚本,但我发现我可以使用URL重写模块注入脚本。 这应该工作,如果我能找到一个可靠的模式匹配,以确保它始终注入。该应用程序似乎不遵循常见的HTML标准。 (我曾认为与''匹配会相当肯定,但是没有。 感谢您的帮助。 –

1

不,这是不可能的。

Access-Control-Allow-Origin主要影响从HTTP请求获取原始数据,而不是实时DOM。

postMessage可以让帧在不同的来源进行通信,但它需要JS包含在两个页面上。