二者QWebFrame并QWebPage具有void loadFinished(bool ok)可用于当网页被完全加载到检测信号。问题是网页上有一些异步加载的内容(ajax)。在这种情况下如何知道页面何时完全加载?
QWebFrame
QWebPage
void loadFinished(bool ok)
我实际上尚未做到这一点,但我认为您 可以 使用来实现您的解决方案QNetworkAccessManager。
QNetworkAccessManager
您可以使用networkAccessManager ()函数从QWebPage获取QNetworkAccessManager 。QNetworkAccessManager的信号完成(QNetworkReply * Reply),该信号在QWebPage实例请求文件时触发。
该finished信号为您提供了QNetworkReply实例,从中可以获取原始请求的副本,以便识别该请求。
finished
因此,创建一个附加到finished信号的插槽,使用传入的QNetworkReply方法确定哪个文件刚刚完成下载,如果这是您的Ajax请求,请执行所需的任何处理。
我唯一需要说明的是,我以前从未做过此事,因此我不确定100%会奏效。
另一种选择是使用QWebFrame的方法将对象插入页面的对象模型中,并插入一些JavaScript,当Ajax请求完成时,JavaScript将通知您的对象。这是一种稍微有点骇人听闻的方法,但是绝对可以。
编辑:
第二种选择对我来说似乎更好。工作流程如下:
在QWebFrame :: javascriptWindowObjectCleared()信号上附加一个插槽。此时,调用QWebFrame :: evaluateJavascript()以添加类似于以下内容的代码:window.onload = function(){//页面已完全加载}
将所需的任何代码放入该函数中。您可能想通过QWebFrame :: addToJavaScriptWindowObject()将QObject添加到页面,然后在该对象上调用一个函数。仅在页面完全加载时才执行此代码。
希望这能回答问题!