簡體   English   中英

如何設置QWebChannel JS API以在QWebEngineView中使用?

[英]How to setup QWebChannel JS API for use in a QWebEngineView?

由於Qt的文檔遠未完成,這是設置QWebChannel的方法,並且在HTML頁面中添加<script>標記與文檔中建議的不同?

可以通過URL qrc:///qtwebchannel/qwebchannel.js加載可訪問的所需腳本:

注意:

  • 如果從QWebEngineView中查看頁面,則只能使用該URL。 否則,您可能需要將API文件加載到Web服務器。

先決條件:

  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM