如何使用javascript在客户端通过串口进行通信?

如何使用javascript在客户端通过串口进行通信?,javascript,node.js,serial-port,Javascript,Node.js,Serial Port,最近收到一个请求,请求通过我的网页将通信添加到通过客户端机器上的serialport连接的设备 我在谷歌上搜索了一下,发现node.js和node serialport似乎是javascript实现这一点的方式。然而,在我的例子中,设备实际上连接到客户端的机器,而不是服务器 我的问题是,从这个意义上讲,如何实现node.js?由于代码是在客户端浏览器上运行的,我是否可以在网页上“嵌入”node.js 或者有没有其他的选择?不过,Applet和ActiveX已经过时了 谢谢 更新: 已经设法说服客

最近收到一个请求,请求通过我的网页将通信添加到通过客户端机器上的serialport连接的设备

我在谷歌上搜索了一下,发现node.js和node serialport似乎是javascript实现这一点的方式。然而,在我的例子中,设备实际上连接到客户端的机器,而不是服务器

我的问题是,从这个意义上讲,如何实现node.js?由于代码是在客户端浏览器上运行的,我是否可以在网页上“嵌入”node.js

或者有没有其他的选择?不过,Applet和ActiveX已经过时了

谢谢

更新: 已经设法说服客户机从web加载小程序,因此我们将通过小程序路径。感谢大家提供的精彩信息!=)

浏览器中的JavaScript只能访问浏览器提供的API:它位于浏览器沙箱中,在那里它(正确地)无法访问客户端文件系统或其他硬件

这与node.js不同,node.js是一个服务器实现,可以访问各种其他文件系统API


要“突破”浏览器,您必须使用某种浏览器扩展。

您必须创建一个插件、小程序或客户端应用程序,以便在将数据发送到服务器之前将其导入客户端的web浏览器

您可以制作一个小应用程序,读取创建.js文件的客户端机器的串行端口,然后您的网页在客户端机器上包含“动态”创建的js文件的src,并且presto您的网页以迂回的方式访问串行端口

GPSGate就是这样工作的:

另见此处:

以及基于java小程序的解决方案:


这只能通过Active X或Java或Flash等插件完成。JavaScript中的代码只与浏览器提供给它的API一样强大

要向服务器发送HTTP请求吗?JavaScript可以做到这一点(遵循同源策略),因为浏览器具有
XMLHttpRequest
API。要查询操作系统上当前正在运行的进程吗?JavaScript无法做到这一点,因为没有浏览器提供API来查询操作系统正在运行的进程

据我所知,没有一款浏览器能够实现任何类型的JavaScript API来执行串口操作,因此,如果不使用插件,就无法实现这一点

但是,这并不排除有一天会出现这样的API:该函数可以从摄像机或麦克风中获取数据,理论上也可以扩展到从其他设备获取数据。

另一个选项(具有安全权限的ActiveX或Java小程序除外)可能是Google原生客户端和Pepper API,但我不知道这是否足以访问串行端口

Firefox扩展可以包括一个可以访问串行端口的本机XPCOM组件,您可能会发现已经有一种方法可以从浏览器chrome(哪些扩展是)访问串行端口,因为安全令牌和智能卡系统支持串行读卡器。Firefox扩展还可用于交付下一个解决方案,这需要在系统上放置本机组件或应用程序

您能告诉我们这里针对的是什么浏览器和操作系统,以及为什么ActiveX和Java被排除在外吗

其他人建议使用本机运行的代理,通过某种协议公开串行端口。您可以使用node、python或任何其他可以创建串行连接和套接字的语言。要从浏览器应用程序访问代理,您需要向页面授予特殊的安全权限,然后可以将代理设置为HTTP或WebSocket服务器。您还可以从代理服务器提供javascript,这将授予脚本HTTP和WebSocket对其原始服务器(即代理服务器)的访问权。Google Chrome扩展可以通过其套接字客户端访问任何目的地和端口。此外,我相信可以在谷歌浏览器中设置一个配置,允许某些页面或每个页面使用该配置,这与允许网页使用本机客户端是一样的


不知道你的目标,我无法确定最佳解决方案是什么。

如果您想从浏览器访问node.js函数,请尝试。

另一个读取串行端口数据的选项是在服务器端使用sockjs和sockjs客户端节点,在客户端使用sockjs-0.3.js。

无法从浏览器的沙盒与设备交互。唯一可能的方法是安装一个浏览器插件,这将是一个中间层。这不是一个答案,但是…看看serproxy()。也许这是你的难题之一:)ActiveX和Java被排除在外的原因是,在客户机上运行“中间层”的编程是有意义的。如果客户机的机器与服务器在同一个网络上怎么办?有没有办法使用node.js和
net
从中提取数据,