2016-01-23 85 views
7

我有一个需要与Qt桌面应用程序进行通信的谷歌浏览器网页扩展 - 但是如何?如何将chrome web扩展与本地主机服务器连接?

  • 有镀铬的本地消息,但我想,以支持多种浏览器/ OS,这将是太多精力,因为它是唯一的铬。

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

我已经建立了使用Qt上127.0.0.1(本地主机)使用QTcpSocket的一个服务器QTcpServer。但是,网络扩展程序无法侦听套接字,只有Chrome应用程序can。我有两种可能的解决方案:

  • 作为一种解决方法,我可以写一个小型的Chrome应用程序。 Qt应用程序会通过chrome应用程序与Chrome扩展对话(Chrome应用程序支持套接字)。但我认为这种方法很笨拙,不够优雅。

  • 另一方面,我已阅读约socket.io。 这个想法是:铬扩展通过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

如果你想支持多种浏览器/ OS,你为什么还在使用谷歌Chrome浏览器扩展?它只适用于铬。 –

+0

因为它是最容易开始和核心(js,html,css)应该是相当普遍的... – user2366975

回答

2

因为你已经知道分机可以建立直接连接:

Google Chrome Socket API in extensions

可能的解决方案

也许您的Qt应用程序也可以发挥的WebSocket,你应该能够从Javascript与沟通:如果你无法从QT应用内服务的WebSockets

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

,另一种方法可以创建一个“桥”有点脚本,也可以发挥的WebSocket你的JavaScript和将消息传递给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

希望这有助于

+1

这也是我在此期间想出来的。我不得不将vom Qt5.2升级到Qt5.3,因为它增加了对网络套接字的支持。我使用的是HTML5 chrome-side和Qt,不需要node.js。 – user2366975

相关问题