13

我用 HTML5 和 JavaScript 编写了一个 UI。我选择了这个实现,以便我可以在 Android Chrome 和Windows 8 RT 之间共享相同的代码。

现在,我的下一个目标是将数据写入 USB HID。我正在与之通信的设备被视为 HID。我提到这部分,以防有办法写入 HID 设备而不是 USB RAW设备。

我对这个问题做了很多研究。但是,HTML5 规范变化如此频繁,以至于我可能遗漏了一些东西。

**无论如何,我是否可以使用一种语言或实现来共享通用代码以访问 Android 和 Windows 8 RT 上的 USB 设备?

如果两者之间无法共享,建议仅在 Android 上进行 USB 通信怎么样?**


以下是我的研究和结论:

  • Silverlight:不支持。网页插件方面,Windows 8 RT 或 Android 不支持

  • Flash:可能的选项。两种操作系统都支持它,尽管它们在Android 4.1 (Jelly Bean) 版本中删除了对 Android 的支持。

  • HTML5:不支持

  • 我查看了 GamePad API,但它似乎只支持从游戏手柄读取。

  • 我查看了设备标签,但当前草稿中不再存在此标签。我读到“导航器”对象在 JavaScript 中替换了它,但它似乎完全不同。此外,设备仅针对获取视频和音频

  • JavaScript:不支持。据我了解,这是因为这会带来安全风险。

  • Chrome 打包应用程序:不支持。我不确定是否支持 Windows 8 RT。但是,Android Chrome 也不支持它。

  • 存在一个可以完全满足我需要的 USB API,但该 API 仅适用于打包的应用程序

  • Java 小程序:不支持。我不确定是否支持 Windows 8 RT。但是,Android Chrome 也不支持它。

  • 有很多关于如何与 USB 设备通信的资源。但是,由于智能手机不支持 Java 小程序,因此最终不受支持。

  • 几个有用的帖子

  • 如何在 ASP.NET 中向串行端口或 USB 端口发送和接收数据?

  • 是否可以从跨浏览器跨操作系统的 Web 应用程序访问 USB?

  • 是否可以提供 JavaScript API 来控制 USB、LPT 和 COM 设备?

4

5 回答 5

8

我实际上已经考虑过如何做类似的事情......

如果您可以控制连接了 USB 设备的计算机,这是一种确定的方法:

让带有 USB 设备的计算机运行 Web 服务器,例如 Apache 和 PHP。让它只听localhost

然后在正在查看的 HTML 页面中,对 localhost/somescript.php(或CGI或 cfm 或其他)执行 Ajax 发布。

在 PHP/CGI 脚本中,与 USB 设备通信,然后向浏览器返回一个 JSON 字符串,说明发生了什么事。

另一种方法是使用自定义 URL 协议。您创建一个可执行文件并将其与您的自定义 URL 协议一起“安装”在客户端计算机上。

然后,您可以使用自定义 URL 协议从浏览器调用可执行文件。

于 2013-03-21T02:41:27.307 回答
2

如果您要控制的 USB 设备是条码打印机,您可以使用jZebra

这是一个直接与本地连接的打印机通信的小程序。

于 2013-04-12T15:40:53.620 回答
2

还有另一种 Web Socket。创建一个 Web 套接字服务器,它将访问本地系统中的 USB 设备。

使用 Web 应用程序中的 Web Socket 连接您的 Web 服务器。Web Socket 具有标准 Api

你可以做这样的事情

  var host = "wss://localhost:25000/test";

  Websokcet ws = new WebSocket(host);

您可以使用 RFC 6455创建您的 web sokcet 服务器

对于较旧的浏览器,您也可以考虑 http 服务器。

于 2013-11-15T07:41:01.267 回答
2

请看一下JSFS。它的工作方式类似于 Chris_vr 的方法,并且已经是一个可行的解决方案。

https://github.com/jsfsproject/jsfs。它是免费的,并在 GPL 下获得许可。

于 2013-12-06T14:06:46.330 回答
1

写入串口:

var writeSerial = function(str) {
  chrome.serial.write(connectionId, str2ab(str), onWrite);
}

// Convert string to ArrayBuffer
var str2ab = function(str) {
  var buf = new ArrayBuffer(str.length);
  var bufView = new Uint8Array(buf);
  for (var i=0; i<str.length; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}

更多信息在http://developer.chrome.com/apps/app_hardware.html

于 2013-10-11T08:10:50.510 回答