[英]How to setup QWebChannel JS API for use in a QWebEngineView?
由於Qt的文檔遠未完成,這是設置QWebChannel的方法,並且在HTML頁面中添加<script>
標記與文檔中建議的不同?
可以通過URL qrc:///qtwebchannel/qwebchannel.js
加載可訪問的所需腳本:
注意:
先決條件:
QT += webchannel
添加到.pro
文件並運行qmake
使用runJavaScript()
在Qt的QWebChannel JS API中執行代碼:
我喜歡的方法,因為它看起來很簡單,到目前為止一直很可靠。 請記住,在此代碼完成時可能無法設置API,因為runJavaScript()
方法在JS代碼執行之前不會阻塞當前線程。
QFile apiFile(":/qtwebchannel/qwebchannel.js"); //load the API from the resources
if(!apiFile.open(QIODevice::ReadOnly))
qDebug()<<"Couldn't load Qt's QWebChannel API!";
QString apiScript = QString::fromLatin1(apiFile.readAll());
apiFile.close();
QWebEngineView view; //your custom QWebEngineView
view.page().runJavaScript(apiScript);
使用runJavaScript()
執行代碼來加載Qt的QWebChannel JS API:
雖然我沒有嘗試這些方法,但它們仍然可以工作,因為它們的目的是加載外部JS文件。 這里建議的方法之一可能會派上用場,具體取決於您使用的其他庫。
在網頁中使用<script>
標記:
這是Qt文檔推薦的默認方法。 它的優點是在頁面加載后立即提供API。 這樣做的缺點是,如果您不是網站的所有者,則需要修改網頁的HTML,這可能很痛苦。
不要忘記在C ++端創建一個QWebChannel對象:
QWebChannel* channel_ = new QWebChannel(view.page());
//attach it to the QWebEnginePage
view.page()->setWebChannel(channel_);
//register a QObject to be exposed to JavaScript
channel_->registerObject(QStringLiteral("jshelper"), this);
在JavaScript代碼上設置QWebChannel:
正如在評論中指出的那樣,為了在C ++和JavaScript之間共享對象,您需要初始化QWebChannel。
new QWebChannel(qt.webChannelTransport, function (channel) {
var sharedObject = channel.objects.sharedObject;
});
這個答案被認為是Qt文檔的補充,所以如果你想添加一些東西,請隨意這樣做。
版本:Qt 5.6.1
資料來源:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.