我正在使用 QT WebEngine 框架来显示网页。我在加载时将 javascript 注入页面,并希望允许 javascript 能够访问 QT 对象。显然,要做到这一点,必须存在一个在铬(javascript)和我的 C++/QT 项目的其余部分之间建立一些 IPC 的 QWebChannel。我遇到了 QWebEnginePage::setWebChannel (QWebChannel *channel) 函数,但是我找不到任何使用它的例子。文档(http://doc.qt.io/qt-5/qwebenginepage.html#setWebChannel)提到 qt.webChannelTransport 应该在 javascript 上下文中可用,但我没有看到在 qwebchannel.js 中建立的位置(https://github.com/qtproject/qtwebchannel/blob/dev/src/webchannel/qwebchannel.js)。一世'http://doc.qt.io/qt-5/qtwebchannel-examples.html ) 并且希望尽可能避免使用 WebSockets。
以下是我尝试实现网络频道的方式。
每当页面加载时,我都会建立一个通道并在 C++ 中注入 javascript:
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)
在 Javascript 中:
new QWebChannel(qt.webChannelTransport, function(channel) { ... });
这导致通道没有正确连接(假设这是因为 qt.webChannelTransport,因为它在我使用 WebSockets 时正在工作)。任何指向以这种方式使用 QWebEnginePage 设置的 QWebChannel 示例的指针也值得赞赏。