2016-01-23 19 views
7

Ho un'estensione web di Google Chrome che deve comunicare con un'applicazione desktop Qt - ma come?Come connettere l'estensione web di Chrome con il server localhost?

  • C'è messaggistica nativo di Chrome, ma come voglio supportare più browser/OS, questo sarebbe troppo sforzo, perché è solo per Chrome.

  • Quindi c'è il post this che suggerisce l'impostazione di un server locale. Questo è quello che ho fatto, vedi sotto.

Ho installato un server con Qt con QTcpServer che utilizza QTcpSocket 's su 127.0.0.1 (localhost). Ma un'estensione web non può ascoltare socket, solo app chrome can. Ci sono 2 possibili soluzioni per la testa:

  • Come soluzione alternativa, potrei forse scrivere un piccolo Chrome App. L'applicazione Qt parlava con l'estensione chrome tramite l'app chrome (socket di supporto per app chrome). Ma penso che questo metodo sia maldestro e non molto elegante.

  • D'altra parte, ho letto su socket.io. L'idea è: l'estensione chrome parla via http requests con socket.io e socket.io dialoga tramite socket con la mia app desktop. Questa è una possibile soluzione?

Quello che ho anche provato, è quello di connettersi direttamente al server locale con il seguente codice. Nella mia applicazione server Qt, vedo che c'è una nuova connessione. Ma non posso ottenere una risposta a tutti (sia il mio codice Qt è sbagliato o è perché estensioni non possono ascoltare prese?)

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

Se si desidera supportare più browser/OS, il motivo per cui si usano ancora le estensioni di Google Chrome? È solo per il cromo. –

+0

perché era il più facile da iniziare e il core (js, html, css) dovrebbe essere abbastanza universale ... – user2366975

risposta

2

come già sapete le estensioni possono non creare connessioni dirette:

Google Chrome Socket API in extensions

possibile soluzione

forse l'applicazione QT potrebbe servire un websocket e si dovrebbe essere in grado per comunicare con quello di JavaScript:

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

se si è in grado di servire WebSockets da dentro l'applicazione QT, un altro approccio potrebbe essere creare un "ponte" un piccolo script che potrebbe servire un websocket al vostro Javascript e passare i messaggi da/per l'applicazione QT

troverai molti esempi su websockets, il modo più semplice per entrare in questo potrebbe essere creare un piccolo server usando node.js per giocare con esso stackabuse.com/node-js -websocket-examples-with-socket-io/

oh! e fare una ricerca per "websocket la politica stessa origine"

Esempio di un interno utilizzando WebSockets (che saranno utili per il debug): chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo?hl = it

speranza che questo aiuta

+1

Questo è anche quello che ho capito nel frattempo. Ho dovuto aggiornare vom Qt5.2 a Qt5.3 per via del supporto aggiunto per i socket Web. Sto usando HTML5 chrome-side e Qt, non necessario node.js. – user2366975