小编典典

使用QtWebKit时如何知道何时加载网页?

ajax

二者QWebFrameQWebPage具有void loadFinished(bool ok)可用于当网页被完全加载到检测信号。问题是网页上有一些异步加载的内容(ajax)。在这种情况下如何知道页面何时完全加载?


阅读 346

收藏
2020-07-26

共1个答案

小编典典

我实际上尚未做到这一点,但我认为您 可以 使用来实现您的解决方案QNetworkAccessManager

您可以使用networkAccessManager
()函数从QWebPage获取QNetworkAccessManager
。QNetworkAccessManager的信号完成(QNetworkReply * Reply),该信号在QWebPage实例请求文件时触发。

finished信号为您提供了QNetworkReply实例,从中可以获取原始请求的副本,以便识别该请求。

因此,创建一个附加到finished信号的插槽,使用传入的QNetworkReply方法确定哪个文件刚刚完成下载,如果这是您的Ajax请求,请执行所需的任何处理。

我唯一需要说明的是,我以前从未做过此事,因此我不确定100%会奏效。

另一种选择是使用QWebFrame的方法将对象插入页面的对象模型中,并插入一些JavaScript,当Ajax请求完成时,JavaScript将通知您的对象。这是一种稍微有点骇人听闻的方法,但是绝对可以。

编辑:

第二种选择对我来说似乎更好。工作流程如下:

在QWebFrame :: javascriptWindowObjectCleared()信号上附加一个插槽。此时,调用QWebFrame ::
evaluateJavascript()以添加类似于以下内容的代码:window.onload = function(){//页面已完全加载}

将所需的任何代码放入该函数中。您可能想通过QWebFrame ::
addToJavaScriptWindowObject()将QObject添加到页面,然后在该对象上调用一个函数。仅在页面完全加载时才执行此代码。

希望这能回答问题!

2020-07-26