簡體   English   中英

如何使用javascript通過客戶端串口進行通信?

[英]how to communicate through serial port on client side using javascript?

最近收到了一個請求,要求通過我的網頁向客戶端機器上通過串口連接的設備添加通信。

我做了一些谷歌搜索,發現帶有node-serialport的node.js似乎是javascript方式。 但是,就我而言,設備實際上是連接到客戶端的計算機,而不是服務器。

我的問題是如何在這個意義上實現node.js? 由於代碼是在客戶端瀏覽器上運行的,我是否可以在我的網頁上“嵌入”node.js?

或者還有其他替代方法嗎? 雖然Applet和ActiveX不合適。

謝謝

更新:曾設法說服客戶從網上加載applet,因此我們將通過applet路由。 謝謝大家的好消息! =)

瀏覽器中的 JavaScript只能訪問瀏覽器提供的API:它位於瀏覽器沙箱中,它(正確地)無法訪問客戶端文件系統或其他硬件。

這與node.js不同,node.js是一個可以訪問各種其他文件系統API的服務器實現。

要“突破”瀏覽器,您必須使用某種瀏覽器擴展。

您必須創建插件,小程序或客戶端應用程序,才能在將數據發送到服務器之前將數據導入客戶端的Web瀏覽器。

您可以創建一個小應用程序,讀取創建.js文件的客戶端計算機的串行端口,然后您的網頁包含客戶端計算機上“動態”創建的js文件的src,然后您的網頁就可以訪問串口以迂回的方式。

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

另請參見此處: 如何從網頁中的串行端口讀取

以及基於Java applet的解決方案: http//code.google.com/p/java-simple-serial-connector/

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

如果要從瀏覽器訪問node.js函數,請嘗試app.js。

這只能通過Active X或Java或Flash等插件來完成。 JavaScript中的代碼僅與從瀏覽器提供的API一樣強大。

想要向服務器發送HTTP請求嗎? JavaScript可以做到這一點(取決於同源策略),因為瀏覽器具有XMLHttpRequest API。 想要查詢當前在操作系統上運行的進程? JavaScript無法做到這一點,因為沒有瀏覽器提供API來查詢操作系統正在運行的進程。

我所知道的瀏覽器沒有實現任何類型的JavaScript API來執行串口操作,因此沒有使用插件就無法實現。

然而,這並不排除某天可能存在這樣的API: getUserMedia函數可以從攝像頭或麥克風中獲取數據,理論上它也可以擴展以從其他設備獲取數據。

另一個選項(具有安全權限的ActiveX或Java小程序除外)可能是Google Native Client和Pepper API,但這是否足以訪問串口,我不知道。

Firefox擴展可以包含可以訪問串行端口的本機XPCOM組件,您可能會發現已經有一種方法可以從瀏覽器chrome訪問串行端口(擴展名為),因為安全令牌和智能卡系統支持串行讀取器。 Firefox擴展也可用於提供下一個解決方案,這需要在系統上放置本機組件或應用程序。

你能告訴我們這里有什么瀏覽器和操作系統(以及為什么要排除ActiveX和Java)?

其他人建議通過某種協議暴露串口的本機運行代理。 您可以使用node,或python,或任何其他可以創建串行連接和套接字的語言。 要從瀏覽器應用程序訪問代理,您需要授予頁面特殊的安全權限,然后您可以將代理設置為HTTP或WebSocket服務器。 您還可以從代理服務javascript,該代理將授予腳本HTTP和WebSocket訪問其作為代理的源服務器。 Google Chrome擴展程序可以使用其套接字客戶端訪問任何目標和端口。 另外,我認為可以在Google Chrome中設置配置以允許在某些頁面或每個頁面上使用此配置,同樣允許網頁使用本機客戶端。

如果不了解您的目標,我無法確定最佳解決方案。

讀取串口數據的另一個選擇是在服務器端使用sockjs和sockjs-client-node,在客戶端使用sockjs-0.3.js。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM