google-chrome-extension - 在本机客户端应用程序和网页之间建立本地连接的最佳方法是什么
问题描述
我有一个带有一些按钮的 USB 设备,它通过专有的 HID 控制接口与主机(Windows 和 Mac)通信。在主机上,我有一个与设备通信的本机应用程序(例如接收按钮按下事件或配置设备)。
现在,我正在寻找一种正确的方法来处理在 Chrome 中运行的网站上的 Javascript 中的按钮事件或设备配置,理想情况下也可以在 Firefox 中(以及其他浏览器中也不错)。因此,我需要在浏览器中运行的 Javascript 和在客户端计算机上运行的本机应用程序之间建立连接。
我的第一种方法是通过原生消息传递使用 Chrome 扩展。我想这可以完成这项工作,但是可能会有一些缺点。需要安装和维护两个组件(扩展程序和本机消息传递主机),并且仅限于 Chrome,也许还有 Firefox(稍作修改)和未来基于 Chromium 的 Edge。此外,虽然我确定 Chrome 扩展程序能够与我的本地应用程序通信,但我不太确定任何网页如何与扩展程序通信而不会引发一些需要注意的安全问题。
所以我在考虑通过 WebSockets 进行连接。本机客户端应用程序可以运行 WebSocket 服务器,并且网页可以连接到 localhost。例如,我见过Enpass做类似的事情。但是如果网页是https呢?那不需要在本地主机上安装证书吗?这甚至可能吗?LetsEncrypt的担忧是什么?
我知道有几个针对这些问题的 stackoverflow 问题,但我还没有找到令人满意的答案。
解决方案
我过去使用过 websocket 方法。您可以做的是在后台脚本中建立一个 Websocket 连接,并使用从内容脚本到后台脚本的消息传递将消息发送到 websocket。这样 https 就不会成为问题(也不确定是否是问题)。
我不太确定任何网页如何与扩展程序通信而不会引发一些需要注意的安全问题。
我从来没有亲自使用过本地消息传递,但我相信如果你开始处理它并提出具体问题,所有问题都可以解决。
推荐阅读
- python - 从前台python opencv中提取两个对象之一
- php - Magento - getEmail() 在哪里定义?
- java - 防止 Spring Boot 在启动时调用 EC2MetadataUtils.getItems
- apache-spark - 从 Spark 中的 DataFrame 中过滤和选择数据
- mysql - “@”在这个位置是无效的输入 MySQL
- javascript - 设置 cookie 域
- delphi - System.Variants.NullStrictConvert 的范围
- docker - 是否可以编辑在 docker 容器上运行的图像内的文本文件?
- mysql - 如何在MYSQL中对列进行排序
- format - 以 ASCII 格式发送命令 STM32