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

时间:2016-04-20 13:38:22

标签: javascript qt qtwebkit qtwebengine

我有一个使用QWebChannel启动Webview的Qt应用程序。

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

但是在我的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值?

1 个答案:

答案 0 :(得分:1)

我认为,在您尝试访问screen对象时,它无法使用。实际上,您的HTML文件将直接加载,但其他对象(如JavaScript对象/程序或样式表(例如CSS文件))将以异步加载

QWebEnginePage

的文档中对此进行了解释
  

立即加载html;外部对象是异步加载的。

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