Sockets 如何将chrome web扩展与本地主机服务器连接?

Sockets 如何将chrome web扩展与本地主机服务器连接?,sockets,http,google-chrome-extension,Sockets,Http,Google Chrome Extension,我有一个GoogleChromeWeb扩展,需要与Qt桌面应用程序通信——但是如何呢 有chrome的原生消息,但由于我想支持多个浏览器/操作系统,这将是太多的努力,因为它只适用于chrome 还有一篇帖子建议设置一个本地服务器。这就是我所做的,见下文 我已经用Qt和qtcserver设置了一个服务器,它使用127.0.0.1(localhost)上的qtcsocket。但网络扩展不能监听套接字,只能监听chrome应用程序。我想到了两种可能的解决方案: 作为一种解决方法,我或许可以编写一

我有一个GoogleChromeWeb扩展,需要与Qt桌面应用程序通信——但是如何呢

  • 有chrome的原生消息,但由于我想支持多个浏览器/操作系统,这将是太多的努力,因为它只适用于chrome

  • 还有一篇帖子建议设置一个本地服务器。这就是我所做的,见下文

我已经用Qt和
qtcserver
设置了一个服务器,它使用127.0.0.1(localhost)上的
qtcsocket
。但网络扩展不能监听套接字,只能监听chrome应用程序。我想到了两种可能的解决方案:

  • 作为一种解决方法,我或许可以编写一个小的chrome应用程序。Qt应用程序将通过chrome应用程序(chrome应用程序支持套接字)与chrome扩展进行通信。但我认为这种方法很笨拙,也不太优雅

  • 另一方面,我读过关于
    socket.io
    。 想法是:chrome扩展通过http请求与socket.io进行对话,socket.io通过sockets与我的桌面应用程序进行对话。这是一个可能的解决方案吗

我还尝试使用以下代码直接连接到本地服务器。在我的Qt服务器应用程序中,我看到有一个新的连接。但我根本无法得到响应(要么我的Qt代码错误,要么是因为扩展无法侦听套接字?)


正如您所知,扩展可以而不是创建直接连接:

可能的解决方案

也许您的QT应用程序可以服务于websocket,您应该能够通过Javascript与websocket进行通信:

如果您无法从QT应用程序内部为websockets提供服务,另一种方法可以是创建一个“桥”,一个小脚本,它可以为您的JavaScript提供websocket服务,并将消息从/传递到QT应用程序

你会在websocket上找到很多例子,简单的方法是使用node.js创建一个小型服务器来使用它stack滥用职权。com/node-js-websocket-examples-with-socket-io/

哦!!并搜索“websocket同源策略”

使用websocket的扩展示例(对调试很有用):chrome.google.com/webstore/detail/simple websocket client/pfdhoblngboilpfeibedpjgfnlcodoo?hl=en


希望这对您有所帮助

如果您想支持多个浏览器/操作系统,为什么还要使用google chrome扩展?这只适用于chrome。因为这是最容易开始的,而且核心(js、html、css)应该是非常通用的……这类似于我想问的一个问题,但在我的情况下,本地web服务器只需要响应来自浏览器的请求,而不是推送更新。这是我可以直接从JS做的,而不需要扩展/应用程序吗?我想在提出一个新问题之前,我会先问这个问题,以防它是琐碎的。这也是我在这段时间里发现的。由于增加了对web套接字的支持,我不得不将vom Qt5.2升级到Qt5.3。我使用的是HTML5 chrome端和Qt,不需要node.js。
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 );
}