JavaScript 中的屏幕对象在 QWebEnginePage 中不可用

screen object in JavaScript not available in a QWebEnginePage

本文关键字:QWebEnginePage 对象 屏幕 JavaScript      更新时间:2023-09-26

我有一个Qt应用程序,它使用QWebChannel启动Webviews。

在这些视图中,我让 JavaScript 做一些事情,以便根据屏幕大小定位/调整窗口大小。screen对象应该提供这种信息。(屏幕文档)

但是在我的QWebEnginePage中,屏幕对象在整个加载过程中是空的。

如果我将侦听器放在按钮上以在页面上的某个位置获取screen.height,现在它可以工作了。

//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
  });
});

所以我的问题是,如何在 JavaScript 中的某个时候访问screen值?

我认为目前您正在尝试访问screen对象,它不可用。事实上,您的HTML文件将直接加载,但其他对象(如JavaScript对象/程序或样式表(例如.CSS文件))将异步加载。

在QWebEnginePage的文档中进行了解释:

HTML 将立即加载;外部对象将异步加载。

因此,当页面未加载时,无法访问此属性。但是,您可以在加载页面后访问它,就像您实际使用按钮上的侦听器一样。获取这些属性的另一种方法是在类中定义Q_INVOKABLE方法,以便在C++端检索它们(请参阅此答案)。