QtWebKit调用 QWebPage::loadFinished ( false )
当网页加载失败时 - 但不知道它失败的原因。
如何获取详细的错误消息,如HTTP响应代码或其他消息?
QtWebKit调用 QWebPage::loadFinished ( false )
当网页加载失败时 - 但不知道它失败的原因。
如何获取详细的错误消息,如HTTP响应代码或其他消息?
事实证明,有几种方法可以获得有关失败的更多细节:
实施 onResourceRequested
和 onResourceReceived
页面上的回调:
page.onResourceRequested = function (resource) {
log('resource requested: ' + resource.url);
}
page.onResourceReceived = function (resource) {
log('resource received: ' + resource.status + ' ' + resource.statusText + ' ' +
resource.contentType + ' ' + resource.url);
}
如果您仍在寻找更多细节,则需要修补PhantomJS内部。更新其CustomPage对象(在WebPage.cpp中)以实现QTWebKit的ErrorExtension。以下是您可以添加的代码:
protected:
bool supportsExtension(Extension extension) const {
if (extension == QWebPage::ErrorPageExtension)
{
return true;
}
return false;
}
bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0)
{
if (extension != QWebPage::ErrorPageExtension)
return false;
ErrorPageExtensionOption *errorOption = (ErrorPageExtensionOption*) option;
std::cerr << "Error loading " << qPrintable(errorOption->url.toString()) << std::endl;
if(errorOption->domain == QWebPage::QtNetwork)
std::cerr << "Network error (" << errorOption->error << "): ";
else if(errorOption->domain == QWebPage::Http)
std::cerr << "HTTP error (" << errorOption->error << "): ";
else if(errorOption->domain == QWebPage::WebKit)
std::cerr << "WebKit error (" << errorOption->error << "): ";
std::cerr << qPrintable(errorOption->errorString) << std::endl;
return false;
}
这将为您提供大部分错误信息,但您仍然可以获得 onLoadFinished(success=false)
没有获得更多细节的事件。从我的研究来看,这些的主要原因是 取消 加载请求。 QTWebKit发送取消的失败通知,但不报告任何详细信息。