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

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

我做了一些Googlesearch,发现node.js与node-serialport似乎是这样做的JavaScript的方式。 但是,就我而言,设备实际上是连接到客户端的机器,而不是服务器。

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

或者有没有其他的办法呢? Applet和ActiveX虽然不在图片中。

谢谢

更新:已经设法说服客户端从网上加载小程序,所以我们将通过小程序路线。 感谢所有您的伟大的信息! =)

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

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

要“爆发”浏览器,你必须使用某种浏览器扩展。

您必须创build一个插件,一个小程序或一个客户端应用程序,才能将数据发送到客户端的Web浏览器,然后再发送到您的服务器。

您可以创build一个小型应用程序,读取创build.js文件的客户端机器的串行端口,然后您的网页将该“dynamic”创build的js文件的src文件包含在客户端计算机上,并使您的网页能够访问串口在迂回的方式。

这是GPSGate的工作原理: http ://gpsgate.com/developer/gps_in_browser/

另请参阅: 如何从网页的串口读取数据

和基于Java小程序的解决scheme: http : //code.google.com/p/java-simple-serial-connector/

http://code.google.com/p/java-simple-serial-connector/wiki/jSSC_Terminal

如果你想从浏览器访问node.jsfunction,试试app.js。

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

想要发送一个HTTP请求到服务器? JavaScript可以做到这一点(根据同源策略),因为浏览器具有XMLHttpRequest API。 想要查询操作系统上正在运行的进程? JavaScript不能这样做,因为没有浏览器提供了一个API来查询操作系统正在运行的进程。

没有我知道的浏览器实现任何types的JavaScript API进行串口操作,所以没有办法做到这一点,没有使用插件。

但是,这并不排除将来有这样一个API存在的可能性: getUserMedia函数可以从相机或麦克风中获取数据,理论上它也可以扩展为从其他设备获取数据。

另一种select(除了具有安全权限的ActiveX或Java小程序)可能是Google Native Client和Pepper API,尽pipe这是否足以访问串行端口,但我不知道。

Firefox扩展可以包含一个可以访问串行端口的本地XPCOM组件,并且您可能会发现已经有一种方法可以从浏览器chrome(这些扩展是)访问串行端口,因为安全令牌和智能卡系统支持串行读取器。 Firefox扩展也可以用来提供下一个解决scheme,这需要在系统上放置本地组件或应用程序。

你能告诉我们什么样的浏览器和操作系统是在这里的目标,为什么排除ActiveX和Java?

其他人则build议通过某种协议暴露串行端口的本地运行代理。 你可以使用node,python或其他可以创build串行连接和套接字的语言。 要从浏览器应用程序访问代理,您需要授予页面特殊的安全权限,然后您可以将代理设置为HTTP或WebSocket服务器。 您也可以从代理服务JavaScript,它将授予脚本HTTP和WebSocket访问它的代理服务器的原始服务器。 Chrome浏览器扩展程序可以通过套接字客户端访问任何目标和端口。 另外,我相信可以在谷歌浏览器中设置一个configuration,以允许某些页面或每个页面的configuration,同样允许本地客户端被网页使用。

不知道更多关于你的目标,我不能确定什么是最好的解决scheme。

读取串口数据的另一种方法是在服务器端使用sockjs和sockjs-client-node,在客户端使用sockjs-0.3.js。