Я хотел бы отобразить пользовательское устройство ввода на сенсорном экране, как только поле ввода 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");
};
}
});
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.