首页 > 解决方案 > 如何建立从浏览器扩展到 qt 的实时通信

问题描述

我正在开发一个 Firefox 扩展,它需要系统端软件和 Web 之间的实时连接。

我的意思是,我想要这样的东西

在扩展

var observer = new MutationObserver(function(childList){sendToQt(JSON.stringify(childList))})
observer.observe(myElement,{childList:true})

在qt应用程序中。

public signals:
    void messageReceived(QString message)

connect(myobject, &MyClass::messageReceived,this,&ThisClass::logMessage)
void logMessage(QString message){
    std::cout<<message.toStdString()<<endl;
    sendMessageBack(recieved)
}

当变异观察者观察到的变异用扩展初始化时,它必须作为字符串消息发送到 qt,并从 qt 响应扩展。我对python套接字非常熟悉。但它似乎不适用于这样的项目。基本上它是通过第一个 firefox 扩展构建,我对 firefox 为扩展提供的设施不太熟悉。有没有这样的技术可以在 qt 和我的扩展之间建立实时通信。

标签: javascriptqtfirefox-addon

解决方案


使用 Qt 和浏览器扩展支持的简易 IPC:

  • Websockets:简单,双向,可以传递 JSON
  • A local HTTP/S API : 更花哨和结构化,如果你只想要本地 IPC 可能更麻烦

网络套接字

  1. Qt:在您的 Qt 应用程序中创建一个QWebSocketServer,并连接到通常的信号。有关实际示例,请参阅“Echo Server”中的 Qt WebSocket 示例。
  2. QtQJson用于编码和解码
  3. Firefox 扩展:在您的 Firefox 扩展中创建一个new WebSocket(<url>),并连接到locahost您在 Qt 应用程序中定义的端口/路径。这是一个使用 Firefox 的 WebSockets 的示例扩展
  4. 两人交流愉快!

HTTP/S API

你明白了,在这种情况下,你使用MangooseRESTinioCppRestSDK等第三方库。

为方便起见,还存在一些开源 Qt 替代方案,但可能会随着其他项目的成熟。Qt 官方 HTTP 服务器不在主线 Qt 5 版本 AFAIK 中。


推荐阅读