如何将chrome web扩展与localhost服务器连接?

use*_*975 7 sockets http google-chrome-extension

我有一个谷歌Chrome网络扩展,需要与Qt桌面应用程序通信 - 但如何?

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

  • 然后有这篇文章建议设置本地服务器.这就是我所做的,见下文.

我已经设置了一个使用Qt的服务器,QTcpServer它使用QTcpSocket的是127.0.0.1(localhost).但是,网络扩展程序无法收听套接字,只有Chrome应用可以.我脑子里有两种可能的解决方案:

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

  • 另一方面,我读过socket.io.这个想法是:chrome扩展通过http requestssocket.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 );
}
Run Code Online (Sandbox Code Playgroud)

小智 6

正如您所知,扩展无法创建直接连接:

扩展中的 Google Chrome Socket API

可能的解决方案

也许您的 QT 应用程序可以提供 websocket,并且您应该能够通过 Javascript 与其进行通信:

http://www.html5rocks.com/en/tutorials/websockets/basics/

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

你会发现很多关于 websockets 的例子,进入这个的简单方法可能是使用 node.js 创建一个小服务器来使用它 stackabuse.com/node-js-websocket-examples-with-socket-io/

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

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

希望这可以帮助