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

时间:2016-01-23 23:24:40

标签: sockets http google-chrome-extension

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

  • 有Chrome的本机消息,但由于我想支持多个浏览器/操作系统,这样做太费劲了,因为它只适用于chrome。

  • 然后有this帖子建议设置本地服务器。这就是我所做的,见下文。

我已经设置了一个带有QTcpServer的Qt的服务器,该服务器在127.0.0.1(localhost)上使用QTcpSocket' s。但是,网络扩展程序无法收听套接字,只能收听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 );
}

1 个答案:

答案 0 :(得分:3)

您已经知道扩展程序可以创建直接连接:

Google Chrome Socket API in extensions

可能的解决方案

也许你的QT应用程序可以提供websocket,你应该可以通过Javascript与它进行通信:

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

如果您无法从QT应用程序内部提供websockets,另一种方法可能是创建一个“桥”一个小脚本,可以为您的JavaScript提供websocket并将消息从/向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

希望这会有所帮助