Ich habe eine Qt-Anwendung, die Webviews mit QWebChannel
startet.Bildschirmobjekt in JavaScript nicht verfügbar in einer QWebEnginePage
In diesen Ansichten habe ich das JavaScript einige Sachen tun, um das Fenster abhängig von der Bildschirmgröße zu positionieren/Größe zu ändern. Das screen
Objekt soll diese Art von Information geben. (screen doc)
Aber in meinem QWebEnginePage
ist das Bildschirmobjekt während des gesamten Ladevorgangs leer.
Wenn ich einen Listener auf eine Schaltfläche setzen, um screen.height
irgendwo auf der Seite zu bekommen, funktioniert es jetzt.
//js local file called in html head
//screen = {}
document.addEventListener("load", function(event) {
//screen = {}
new QWebChannel(qt.webChannelTransport, function(channel) {
//screen = {}
//stuff
channel.object.myClass.show(function(res){ //Qt function that calls the show() method of the QWebEngineView
//screen = {}
});
});
document.getElementById("myBtn").addEventListener("click", function(){
console.log("height:" + screen.height); // screen: 1440
});
});
Also meine Frage ist, wie kann ich auf screen
Werte an einem gewissen Punkt in meinem JavaScript?
Ist nicht das was das 'load' Ereignis tun soll? Wird ausgelöst, nachdem das Dokument und seine abhängigen Ressourcen geladen wurden? Ich habe gerade von 'QWebPage' migriert, wobei externe Objekte scheinbar synchron geladen wurden. Ja, ich könnte eine 'Q_INVOKABLE' Methode verwenden, um diese Werte abzurufen. Ich bin nur sicher, dass ich nicht mehr so wie vorher sein kann. – hereismass
Die globale Javascript-Variable "window" löst das Ereignis "load" aus, dann gibt 'QWebEnginePage' das Signal' loadFinished() 'aus und erst danach können Sie die Eigenschaften abrufen – IAmInPLS
Ich habe gerade versucht,' screen' Werte nach dem 'loadFinished () 'signal, und' screen' ist immer noch nicht verfügbar. Tatsächlich wird 'loadFinished()' vor dem JavaScript-Ereignis 'load' ausgegeben, sogar vor' DomContentLoaded'. Ich werde Ihrem Rat folgen und 'Q_INVOKABLE' Methoden implementieren, um diese Werte zu erhalten. Danke :) – hereismass