Qt 5.12.4 中 addToJavaScriptWindowObject 的替代方案

Alternative of addToJavaScriptWindowObject in Qt 5.12.4

我正在尝试将我的代码从 QWebView 迁移到 QWebEngine。我想将代码中的一个对象添加到 java 脚本中。在 QWebView 中,可以使用函数 addToJavaScriptWindowObject。我们如何在 QWebEngine 中做到这一点。

webview->page()->mainFrame()->addToJavaScriptWindowObject("qtObject",this);

我们的java脚本需要调用"qtObject"的函数。

QFile webChannelJsFile(":/qtwebchannel/qwebchannel.js");
    if (!webChannelJsFile.open(QIODevice::ReadOnly)) {
        qDebug() << QString("Couldn't open qwebchannel.js file: %1").arg(webChannelJsFile.errorString());
    }
    else {
        qDebug() << "OK webEngineProfile";
        QByteArray webChannelJs = webChannelJsFile.readAll();
        webChannelJs.append(
            "\n"
            "var qtObject"
            "\n"
            "new QWebChannel(qt.webChannelTransport, function(channel) {"
            "     qtObject = channel.objects.qtObject;"
            "});"
        );

        QWebEngineScript script;
        script.setName("qwebchannel.js");
        script.setInjectionPoint(QWebEngineScript::DocumentCreation);
        script.setRunsOnSubFrames(false);
        script.setWorldId(QWebEngineScript::MainWorld);
        script.setSourceCode(webChannelJs);

        page->scripts().insert(script);

    QWebChannel *channel = new QWebChannel(page);
    channel->registerObject("qtObject", this);
    page->setWebChannel(channel);
    return page;