2016-01-23 40 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

相關問題