Utilizzo la struttura QT WebEngine per visualizzare pagine Web. Inserisco javascript in una pagina quando viene caricato e voglio consentire al javascript di accedere a un oggetto QT. Apparentemente, per fare ciò deve esistere un QWebChannel che stabilisce un po 'di IPC tra chromium (la javascript) e il resto del mio progetto C++/QT. Mi sono imbattuto nella funzione QWebEnginePage :: setWebChannel (canale QWebChannel *), tuttavia non riesco a trovare alcun esempio del suo utilizzo. La documentazione (http://doc.qt.io/qt-5/qwebenginepage.html#setWebChannel) indica che qt.webChannelTransport dovrebbe essere disponibile nel contesto javascript, ma non vedo dove sia stabilito in qwebchannel.js (https://github.com/qtproject/qtwebchannel/blob/dev/src/webchannel/qwebchannel.js). Ho visto gli esempi di WebChannel (http://doc.qt.io/qt-5/qtwebchannel-examples.html) e vorrei evitare i WebSockets se possibile.QT QWebEnginePage :: setWebChannel() oggetto di trasporto
Di seguito è come ho cercato di implementare il canale web.
Ogni volta che una pagina viene caricata ho stabilire un canale e iniettare il codice JavaScript in C++:
QWebChannel *channel = new QWebChannel();
channel->registerObject(QStringLiteral("jshelper"), helper);
view->page()->runJavaScript(qwebjs); //this is qwebchannel.js
view->page()->setWebChannel(channel);
view->page()->runJavaScript(myfunction); //function that calls QT object (jshelper)
in JavaScript:
new QWebChannel(qt.webChannelTransport, function(channel) { ... });
che si traduce nel canale non essere collegato correttamente (supponendo che questo sia dovuto a qt.webChannelTransport, come funzionava quando stavo usando WebSockets). È anche apprezzato qualsiasi suggerimento su esempi di QWebChannel impostato con QWebEnginePage in questo modo.
Questo è fantastico, il mio unico problema è che devo iniettare gli script perché non ho alcun controllo sulle pagine che vengono caricate. Inoltre, quando dici "il nuovo QT 5.5", intendi dal ramo dev? Sto usando QT Creator 5.5.0 e non sono sicuro di come sia aggiornato il codice sorgente QT da cui lavoro. Ho provato l'impostazione della variabile di ambiente per eseguire il debug di JS in una console ma non funziona (credo perché questa opzione di debug proviene da un commit recente). – mathieujofis
Vedo. In Qt Creator, vai su Strumenti> Opzioni> Crea ed esegui> Versioni Qt e verifica quale versione hai. Quando dico Qt 5.5, intendo [la versione stabile che è stata rilasciata il 1 ° luglio di quest'anno] (http://blog.qt.io/blog/2015/07/01/qt-5-5-released/) . Qt 5.5 ha aggiunto il supporto integrato per Chromium IPC su QWebChannel (ad esempio, 'QWebEnginePage :: setWebChannel()' e 'qt.webChannelTransport' in JS). Inoltre, il tuo Qt Creator non può essere alla v5.5, [l'ultima versione è la v3.4.2] (http://blog.qt.io/blog/2015/07/01/qt-creator-3-4-2- rilasciato /) :) –
Inoltre, 'QTWEBENGINE_REMOTE_DEBUGGING' è presente nella versione Qt 5.5: http://stackoverflow.com/a/29721197/504611 –