我有一个需要与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 );
}
答案 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
希望这会有所帮助