Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 打开需要对另一个域进行ajax调用的新窗口_Javascript_Ajax_Same Origin Policy - Fatal编程技术网

Javascript 打开需要对另一个域进行ajax调用的新窗口

Javascript 打开需要对另一个域进行ajax调用的新窗口,javascript,ajax,same-origin-policy,Javascript,Ajax,Same Origin Policy,背景 我们有两个web应用程序托管在不同的子域上。是一个内部管理系统。是一个帮助台系统 我们可以修改应用程序1的源代码,但无法修改应用程序2 目标 显示应用程序1中订单的链接,该订单将打开一个新窗口,其URL为应用程序2中的票证URL 我们的想法是,我们的员工可以看到订单上有一张针对该订单的帮助台票证,只需单击订单上的链接即可查看票证并回复 问题 无论我如何打开新窗口(window.open、target=“_blank”等),新窗口中的票证都无法向托管它的帮助台系统发出任何ajax请求 新窗口

背景 我们有两个web应用程序托管在不同的子域上。是一个内部管理系统。是一个帮助台系统

我们可以修改应用程序1的源代码,但无法修改应用程序2

目标 显示应用程序1中订单的链接,该订单将打开一个新窗口,其URL为应用程序2中的票证URL

我们的想法是,我们的员工可以看到订单上有一张针对该订单的帮助台票证,只需单击订单上的链接即可查看票证并回复

问题 无论我如何打开新窗口(window.open、target=“_blank”等),新窗口中的票证都无法向托管它的帮助台系统发出任何ajax请求

新窗口的URL是应用程序2的一部分

在谷歌开发工具中,它告诉我“请求访问的帧有一个“http”协议,被访问的帧有一个“https”协议。协议必须匹配。”即使我使用_blank打开它

如果我手动转到完全相同的URL,一切正常。。。但是当我需要它从链接工作时,这没有帮助

有没有办法实现上述目标

如果没有,是否有任何方法可以打开一个新窗口,该窗口与打开它的窗口“分离”,从而使同源策略不再适用

编辑2014-03-28 10:23 我根本无法访问App2的代码。我无法对App2进行任何更改。任何答案都必须考虑到这一点


我正在尝试从我的应用程序(App1)打开一个新窗口,其中该窗口的目标URL是App2中的一个页面。然后,App2中的页面需要能够使用ajax与App2的其他区域进行通信。这就是问题所在。因为App1打开了窗口,所以同源策略阻止该窗口发出ajax请求。

您可以使用代理服务器或。

您可以使用代理服务器或。

使用以下url//app2.mydomain.co.uk而不使用http或https。

使用以下url//app2.mydomain.co.uk而不使用http或httpshttps.

这不仅是一个跨域问题,也是一个协议问题: 如果没有此警告,您无法将https嵌入http页面

考虑在App1中使用iframe:

<iframe src="https://app2.mydomain.co.uk" ></iframe>

或者,您可以使用访问两个域之间的数据(但我认为这不是重点,您需要整个App2页面,不是吗?)

编辑:通过重新阅读您的问题,我非常肯定有两件事:

  • 你看的方向不对。你说App2不使用SSL,当Chrome说“协议必须匹配”时,这显然是错误的
  • 这不是“连接”或“分离”问题。如果在页面中放置链接(空白或非空白),则可以毫无问题地加载新页面,也可以不加载与引用页面的链接
所以我的猜测是:您正在调用没有SSL的App2(没有https),但是在App2内部,涉及到一些https(当然是一些ajax查询)。因此,问题是:当您在没有https的情况下打开页面时,似乎会加载,但当第一个https Ajax启动时,它会失败


在调用App2 url时尝试使用https,并给出结果

这不仅是一个跨域问题,也是一个协议问题: 如果没有此警告,您无法将https嵌入http页面

考虑在App1中使用iframe:

<iframe src="https://app2.mydomain.co.uk" ></iframe>

或者,您可以使用访问两个域之间的数据(但我认为这不是重点,您需要整个App2页面,不是吗?)

编辑:通过重新阅读您的问题,我非常肯定有两件事:

  • 你看的方向不对。你说App2不使用SSL,当Chrome说“协议必须匹配”时,这显然是错误的
  • 这不是“连接”或“分离”问题。如果在页面中放置链接(空白或非空白),则可以毫无问题地加载新页面,也可以不加载与引用页面的链接
所以我的猜测是:您正在调用没有SSL的App2(没有https),但是在App2内部,涉及到一些https(当然是一些ajax查询)。因此,问题是:当您在没有https的情况下打开页面时,似乎会加载,但当第一个https Ajax启动时,它会失败


在调用App2 url时尝试使用https,并给出结果

我的解决方案是:在应用程序1中创建一个方法
您的方法
,在服务器端调用应用程序2,然后,您可以使用AJAX调用您的方法,该方法将返回应用程序2的结果。

我的解决方案是:在应用程序1中,您创建一个方法,该方法调用服务器端的应用程序2,然后,您可以使用AJAX调用您的方法,该方法将返回应用程序2的结果。

我怀疑第二个(帮助台)应用程序上的JavaScript试图通过
窗口访问第一个应用程序。opener
(这可能会导致您看到的跨源错误)和后续JavaScript(通过AJAX获取内容)然后就不会被处决了。通过在第二个应用程序中设置适当的断点,您可能可以缩小范围

如果这是原因,并且您无法修改帮助台应用程序的源,那么转到内部域中的URL,然后将重定向到帮助台怎么样?重定向应导致
window.opener
属性变为
null
(与手动键入URL相同)


假设和,点击“帮助单”链接将进入内部应用程序中的URL,例如,该URL将以
301
响应和适当的
位置进行响应:http://helpdesk.domain.uk/help/ticketId
标题将用户带到实际的帮助热线URL。

我怀疑第二个(帮助热线)上有JavaScript应用程序正在尝试访问fir