【发布时间】:2016-04-30 10:34:54
【问题描述】:
我有一个需要与 Qt 桌面应用程序通信的 google chrome 网络扩展程序 - 但如何?
有 chrome 的原生消息传递,但由于我想支持多个浏览器/操作系统,这将是太多的努力,因为它只适用于 chrome。
然后有this 的帖子建议设置本地服务器。这就是我所做的,见下文。
我已经设置了一个带有QTcpServer 的Qt 服务器,它在127.0.0.1 (localhost) 上使用QTcpSocket。但是一个网络扩展不能监听套接字,只能监听 chrome 应用程序can。我想到了两种可能的解决方案:
作为一种解决方法,我或许可以编写一个小型 chrome 应用程序。 Qt 应用程序将通过 chrome 应用程序与 chrome 扩展程序通信(chrome 应用程序支持套接字)。但我认为这种方法很笨拙,也不是很优雅。
另一方面,我读过
socket.io。 想法是:chrome 扩展通过http requests与socket.io 对话,socket.io 通过套接字与我的桌面应用程序对话。这是一个可能的解决方案吗?
我也试过,直接用下面的代码连接到本地服务器。在我的 Qt 服务器应用程序中,我看到有一个新连接。但是我根本无法得到响应(我的 Qt 代码是错误的还是因为扩展无法侦听套接字?)
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:12345", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
alert('This is the response from the server: '+ xhr.responseText );
}
【问题讨论】:
-
如果你想支持多种浏览器/操作系统,为什么还要使用谷歌浏览器扩展?它仅适用于 chrome。
-
因为它是最容易上手的,而且核心(js、html、css)应该是相当通用的......
-
这类似于我想问的一个问题,但在我的情况下,本地网络服务器只需要响应来自浏览器的请求,而不是推送更新。那是我可以直接从 JS 做的事情而无需扩展/应用程序吗?我想在提出一个新问题之前先在这里问一下,以防它是微不足道的。
标签: sockets http google-chrome-extension