Ich verwende das QT WebEngine-Framework, um Webseiten anzuzeigen. Ich injiziere Javascript in eine Seite, wenn es geladen wird, und möchte dem Javascript erlauben, auf ein QT-Objekt zugreifen zu können. Anscheinend muss dazu ein QWebChannel vorhanden sein, der eine IPC zwischen Chrom (dem Javascript) und dem Rest meines C++/QT-Projekts herstellt. Ich bin auf die Funktion QWebEnginePage :: setWebChannel (QWebChannel * channel) gestoßen, kann jedoch keine Beispiele für ihre Verwendung finden. Die Dokumentation (http://doc.qt.io/qt-5/qwebenginepage.html#setWebChannel) erwähnt, dass qt.webChannelTransport im JavaScript-Kontext verfügbar sein sollte, aber ich sehe nicht, wo das in qwebchannel.js (https://github.com/qtproject/qtwebchannel/blob/dev/src/webchannel/qwebchannel.js) festgelegt ist. Ich habe die WebChannel-Beispiele (http://doc.qt.io/qt-5/qtwebchannel-examples.html) gesehen und möchte WebSockets möglichst vermeiden.QT QWebEnginePage :: setWebChannel() Transportobjekt
Unten ist, wie ich versucht habe, den Web-Kanal zu implementieren.
Jedes Mal, wenn eine Seite geladen ich einen Kanal aufzubauen und das Javascript in C injizieren ++:
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) { ... });
, die in den Kanal führt nicht richtig angeschlossen ist (Angenommen, dies ist wegen qt.webChannelTransport, wie es funktionierte, als ich WebSockets verwendete). Alle Verweise auf Beispiele von QWebChannel, die auf diese Weise mit QWebEnginePage eingerichtet werden, werden ebenfalls geschätzt.
Das ist großartig-- mein einziges Problem ist, dass ich die Skripte injizieren muss, da ich keine Kontrolle über die Seiten habe, die geladen werden. Auch wenn du "das neue QT 5.5" sagst, meinst du das vom Dev-Zweig? Ich verwende QT Creator 5.5.0 und bin mir nicht sicher, wie der QT-Quellcode, von dem ich arbeite, aktualisiert wurde. Ich habe versucht, die Umgebungsvariable Einstellung zu JS in einer Konsole zu debuggen, aber es funktioniert nicht (ich denke, weil diese Debug-Option von einem letzten Commit ist). – mathieujofis
Ich sehe. Navigieren Sie in Qt Creator zu Extras> Optionen> Erstellen und Ausführen> Qt-Versionen und prüfen Sie, welche Version Sie haben. Wenn ich Qt 5.5 sage, meine ich [die stabile Version, die am 1. Juli dieses Jahres veröffentlicht wurde] (http://blog.qt.io/blog/2015/07/01/qt-5-5-released/) . Qt 5.5 hat integrierte Unterstützung für Chromium IPC über QWebChannel hinzugefügt (d. H. "QWebEnginePage :: setWebChannel()" und "qt.webChannelTransport" in JS). Außerdem kann Ihr Qt Creator nicht unter Version 5.5 sein, [die neueste Version ist v3.4.2] (http://blog.qt.io/blog/2015/07/01/qt-creator-3-4-2- freigegeben /) :) –
Auch die 'QTWEBENGINE_REMOTE_DEBUGGING' ist in der Qt 5.5-Version vorhanden: http://Stackoverflow.com/a/29721197/504611 –