【发布时间】:2014-04-27 05:38:43
【问题描述】:
背景 我们有两个 Web 应用程序托管在不同的子域上。 Application 1 是一个内部管理系统。 Application 2 是一个帮助台系统。
我们可以修改Application 1的源代码,但我们无权修改Application 2。
目标 在应用程序 1 中显示针对订单的链接,该链接将打开一个新窗口,其 URL 是应用程序 2 中工单的 URL。
我们的工作人员可以看到订单有针对它的帮助台票,只需单击订单上的链接即可查看票并回复它。
问题 无论我如何打开新窗口(window.open、target="_blank" 等),新窗口中的票证都无法将任何 ajax 请求返回到托管它的帮助台系统。
新窗口的 URL 是应用程序 2 的一部分。
在 Google 开发工具中,它告诉我“请求访问的框架具有“http”协议,正在访问的框架具有“https”协议。协议必须匹配。”即使我使用 _blank 打开它。
如果我手动访问完全相同的 URL,一切正常...但是当我需要它从链接中工作时,这无济于事。
有没有什么办法可以达到上述目的?
如果没有,我有什么办法可以打开一个与打开它的窗口“分离”的新窗口,从而不再适用同源策略?
编辑 2014-03-28 10:23 我根本无法访问 App2 的代码。我无法对 App2 进行任何更改。任何答案都必须考虑到这一点。
我正在尝试从我的应用程序 (App1) 打开一个新窗口,该窗口的目标 URL 是 App2 中的一个页面。然后,App2 中的那个页面需要能够使用 ajax 与 App2 的其他区域进行通信。这就是问题所在。因为 App1 打开了窗口,同源策略阻止该窗口发出 ajax 请求。
【问题讨论】:
-
那个应用程序2,是帮助台系统吗?或者帮助台系统在另一个应用程序中?另外,我了解到您可以打开新窗口,问题是新窗口中的页面无法向帮助台系统发出成功的 AJAX 请求。我理解正确吗?
-
App2 是帮助台。此外,App2 上没有 SSL。是的,你理解正确。
-
@Quentin 这不是重复的,这是一个非常具体的问题,您链接的帖子中的任何答案都不能在这种情况下起作用,因为我无法访问 app2 的代码
-
这没有意义。如果您从链接或脚本打开一个新窗口,那么该页面应该可以正常工作。这里还有其他事情发生。
标签: javascript ajax same-origin-policy