Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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函数调用?_Java_Javascript_Cors - Fatal编程技术网

跨域javascript函数调用?

跨域javascript函数调用?,java,javascript,cors,Java,Javascript,Cors,我在调用JS函数时遇到了一个问题,该函数位于同一网络中另一个服务器的另一个网站中。我的脚本的工作方式如下: 有一个表单,在服务器1(IP:192.168.1.17)的页面中有一个按钮,可以从服务器2(IP:162.168.1.18)的页面打开一个弹出窗口,并显示项目列表。通过双击列表中的一个项目,页面将执行opener.setearProducto函数,检索aString作为参数。但此时,Firebug向我显示了一条消息:“错误:访问属性'setearProductos'的权限被拒绝”,脚本无法

我在调用JS函数时遇到了一个问题,该函数位于同一网络中另一个服务器的另一个网站中。我的脚本的工作方式如下:

有一个表单,在服务器1(IP:192.168.1.17)的页面中有一个按钮,可以从服务器2(IP:162.168.1.18)的页面打开一个弹出窗口,并显示项目列表。通过双击列表中的一个项目,页面将执行
opener.setearProducto
函数,检索aString作为参数。但此时,Firebug向我显示了一条消息:“错误:访问属性'setearProductos'的权限被拒绝”,脚本无法工作。 这很奇怪,因为当我在同一台电脑上测试它时,一切都很完美

我在谷歌上搜索,发现需要安装。但当我在两台服务器上安装它时,脚本仍然无法工作。我还尝试将头访问控制Allow Origin添加到JSP文件中,但也没有成功

我不知道这个问题是否与应用程序中使用的框架有关:Struts 2和Spring

我需要帮助,因为我不知道该怎么办

如果有帮助,我会附加web.xml


科尔斯
com.thetransactioncompany.cors.CORSFilter
支柱2
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
org.springframework.web.context.ContextLoaderListener
sistema.cron.TareasProgramadas
sistema.base.logica.ControlServicios系统
科尔斯
/*
支柱2
/*
120
index.jsp

我相信您错过了如下“init param”设置

    <init-param>
            <param-name>cors.allowOrigin</param-name>
            <param-value>http://example.com</param-value>
    </init-param>

金鸡儿
http://example.com
发现

需要指定此选项的原因是,浏览器已创建了某些保护,因此您不能简单地对任何外部站点进行远程调用


我建议你在网站上读一下。其缺点是,当您向外部域发出http POST请求时,浏览器将首先使用服务器将用于确定是否进行调用的某些参数进行http选项调用,然后浏览器将使用它来知道是否可以继续POST请求。

从外观上看,您违反了Javascript的要求。简而言之:您的浏览器从服务器1(IP:192.168.1.17)获取页面,但在稍后的过程中,它希望执行驻留在服务器2(IP:192.168.1.18)中的脚本。这是javascript领域的禁忌。维基百科的文章解释了3种可以放松这一限制的方法

如果您决定采用Ajax方式,那么还有第四种选择,也是个人最喜欢的一种方式,JSONP方式

我也不明白你说的关于CORS的意思:

我在两台服务器上都安装了它

CORS不是你安装的东西。它是一个HTTP扩展,在该扩展中,想要违反同源策略的浏览器实际上告诉web服务器(通过HTTP头扩展
origin
)它想要在它从另一个web服务器带来的页面内执行代码。将其放在您的场景中:您的浏览器从服务器1打开页面,然后联系服务器2以执行附加代码,它告诉web服务器

我从服务器1带来了最初的页面。你允许这样做吗 在他的页面中执行你的代码

web服务器2需要配置(无需安装AFAIK),以确定哪些是它信任的源服务器,哪些不是


当所有内容都驻留在同一台PC上时,它工作的原因是初始网页和您希望调用的
opener的额外代码的来源都是相同的。setearProducto

当我在同一台PC上测试它时,所有工作都很好,可能是因为您的PC被允许远程访问其他服务器资源或同时访问这两个web资源应用程序部署在同一台服务器上,因此它们之间共享资源的所有权限都已启用。我将尝试使用“跨文档消息传递”,因为我不需要进行ajax调用,只需要将一个脚本上的文本传递给另一个脚本。您引用的页面位于附加配置部分:“在大多数情况下,CORS筛选器可以在没有其他配置的情况下运行……如果默认的公共CORS模式不满足您的要求,您可以通过指定自己的配置来覆盖它。”我不知道问题出在哪里,但我不认为它缺少init参数。