Предоставление объекта qml веб-сайту / Javascript с использованием QWebChannel

1

Я хотел бы отобразить пользовательское устройство ввода на сенсорном экране, как только поле ввода html будет сфокусировано в отображении QWebEngineView. Поэтому я попытался открыть объект устройства ввода через QWebChannel на стороне клиента Javascipt, который затем может вызвать метод show устройства ввода, как только поле ввода будет сфокусировано.

Однако в настоящее время я получаю одну из следующих двух ошибок:

Uncaught TypeError: Не удается прочитать свойство "отправить" неопределенного в строке 60

Uncaught ReferenceError: QWebChannel не определен в строке 2

Кроме того, я не уверен, когда использовать navigator.qtWebChannelTransport вместо qt.webChannelTransport в качестве параметра для QWebChannel.

Window.qml

ApplicationWindow {

    WebView {
        id: webView
        anchors.fill: parent

        // Register keyboard as web channel object.
        webChannel.registeredObjects: [myObject]
    }

    MyObject {
        id: myObject
        WebChannel.id: "myWebObject"
    }
}

WebView.qml

WebEngineView {

    // Load web channel and input method handling scripts.
    userScripts: [
        WebEngineScript {
            injectionPoint: WebEngineScript.DocumentCreation
            name: "QWebChannel"
            sourceUrl: "qrc:///qtwebchannel/qwebchannel.js"
        },

        WebEngineScript {
            injectionPoint: WebEngineScript.DocumentReady
            name: "MyObjectInjector"
            sourceUrl: "qrc:/myscript.js"
        }
    ]
}

myscript.js

window.channel = new QWebChannel(navigator.qtWebChannelTransport, function(channel) {
    var inputs = window.document.getElementsByTagName('INPUT');

    var index;
    for(index=0; index < inputs.length; index++) {
        inputs[index].onfocus = function() {
            console.log("Input focused");
        };
    }
});
Теги:
qt
qml

1 ответ

1

Uncaught ReferenceError: QWebChannel не определен в строке 2

Я предполагаю, что QWebChannel не открыт для myscript.js. Попробуйте worldId: WebEngineScript.MainWorld в WebEngineScript.

    WebEngineScript {
        injectionPoint: WebEngineScript.DocumentCreation
        worldId: WebEngineScript.MainWorld
        name: "QWebChannel"
        sourceUrl: "qrc:///qtwebchannel/qwebchannel.js"
    },

Кроме того, я не уверен, когда использовать navigator.qtWebChannelTransport вместо qt.webChannelTransport в качестве параметра для QWebChannel.

qt.webChannelTransport кажется правильным. См. Https://bugreports.qt.io/browse/QTBUG-52090.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню