【问题标题】:How to connect chrome web extension with localhost server?如何将 chrome Web 扩展与 localhost 服务器连接?
【发布时间】: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


【解决方案1】:

正如您已经知道的那样,扩展程序不能创建直接连接:

Google Chrome Socket API in extensions

可能的解决方案

也许您的 QT 应用程序可以为 websocket 提供服务,并且您应该能够通过 Javascript 与之通信:

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

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

希望对你有帮助

【讨论】:

  • 这也是我同时想到的。由于增加了对 Web 套接字的支持,我不得不将 vom Qt5.2 升级到 Qt5.3。我正在使用 HTML5 chrome-side 和 Qt,不需要 node.js。
猜你喜欢
  • 1970-01-01
  • 2022-06-20
  • 1970-01-01
  • 2016-06-14
  • 2016-11-14
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多