Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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
在浏览器中运行的Java应用程序和JavaScript可以相互通信吗?_Java_Javascript - Fatal编程技术网

在浏览器中运行的Java应用程序和JavaScript可以相互通信吗?

在浏览器中运行的Java应用程序和JavaScript可以相互通信吗?,java,javascript,Java,Javascript,我在一个网站中嵌入了一个JavaScript,在一个普通的浏览器中运行,我在同一台机器上运行了一个Java应用程序。我正在寻找一种让双方都能相互沟通的方式 我假设从浏览器中运行的JavaScript内部在本地文件系统中创建文件是毫无疑问的 我想到的唯一方法是使用一个两个程序都可以向其发送消息并从中轮询新消息的服务器 还有其他方法可以做到这一点吗?浏览器中的JavaScript只能发出AJAX请求或与浏览器插件通信,如果它们提供一些额外的JS接口 本地HTTP连接 一个选项是侦听Java应用程序中

我在一个网站中嵌入了一个JavaScript,在一个普通的浏览器中运行,我在同一台机器上运行了一个Java应用程序。我正在寻找一种让双方都能相互沟通的方式

我假设从浏览器中运行的JavaScript内部在本地文件系统中创建文件是毫无疑问的

我想到的唯一方法是使用一个两个程序都可以向其发送消息并从中轮询新消息的服务器


还有其他方法可以做到这一点吗?

浏览器中的JavaScript只能发出AJAX请求或与浏览器插件通信,如果它们提供一些额外的JS接口

本地HTTP连接

一个选项是侦听Java应用程序中的HTTP连接(不必是servlet)

你需要处理

中央服务器

另一个选择是拥有一个中央服务器,JS和Java代码都将连接到该服务器

Java小程序

另一种选择是使用Java小程序。在特权模式下运行时,您几乎可以做任何事情(也许您可以将Java应用程序转换为Java小程序)


您需要在此处处理小程序安全性(例如,使用受信任的证书对小程序进行签名)。

有关javascript中的直接套接字通信,请参阅此问题。你需要一个HTML5浏览器,如果你想在WWW上发布它,这可能不“仅仅”起作用,也不一定是个好主意


我在实践中看到了两种方法:

  • Java应用程序可能会监听一些本地端口,JS将通过XHR访问这些端口。您需要考虑跨站点脚本(您的JS可能需要从本地URL加载),但这是可行的。最简单的可能是运行嵌入式HTTP服务器
  • 您的Java应用程序可能在操作系统中注册为protocoll处理程序。然后JS将打开应用程序注册的链接,从而向应用程序发送数据

正如@Pavelhool所指出的,这是一种解决问题的方法。

这里的“在同一台机器上”是什么意思?将在客户端上调用在浏览器中运行的Javascript。您也有一个Java应用程序在客户端上运行?是的,Java应用程序和JavaScript都在客户端上运行。最自然的方式是JavaScript与支持HTML的服务器对话,例如在Tomcat中运行的典型servlet。应用程序可以用您喜欢的任何方式与servlet通信,但HTML或TCP/sockets听起来都合乎逻辑。然后servlet将充当两个方向的传递。这不是nashorn()的用例吗?nashorn的用例是为Java提供脚本功能。AFAIK与浏览器集成无关,“协议处理程序”方法是一个非常有趣的想法+1我想知道浏览器安全性是否允许您连接到将在本地主机上运行的服务器,但是。。。这是一个非常有趣的问题和可能的解决方案,但如果在所有浏览器中都是如此,我会感到惊讶。为什么不能从浏览器连接到本地主机?比如,
localhost:8080
?要让JS中的XHR正常工作,这个JS必须来自
localhost:8080
,或者查看前面提到的CORS解决方案。浏览器不够具体-我怀疑您是否可以从外部web服务器拉取的web应用程序连接到在本地主机上运行的东西-在本地服务器上启用或不启用CORS的情况下。在我看来,这样做似乎违反了浏览器沙箱,因为您仍然可以从外部托管的web应用程序访问本地客户端。我很想看看一些官方规范,这些规范规定浏览器应该允许这种情况。@Gimby如果您从web服务器获得一个HTML文件,并且它包含一个
,那么
my.js
在按照XHR从
http://localhost:8080
。CORS也应该起作用。为什么不应该呢?因为主机名为
localhost
?有证据吗?有证据表明SOP/COR不能与localhost一起工作吗?顺便说一句,对于中央服务器,我看到了基于JNLP的解决方案,其中web客户端和通过JNLP加载的富客户端以这种方式通信。一个很好的观点。