gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 04:35:42 26 4
gpt4 key购买 nike

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

在这些 View 中,我让 JavaScript 执行一些操作,以便根据屏幕大小定位窗口/调整窗口大小。 screen 对象应该提供此类信息。 ( screen doc )

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

如果我在按钮上放置一个监听器以获取页面上某处的 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的文档中有解释:

The html is loaded immediately; external objects are loaded asynchronously.

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

关于javascript - JavaScript 中的屏幕对象在 QWebEnginePage 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36745644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com