我想在QWebView
中显示错误页面。例如,如果服务器返回 404 错误,则 QWebView
应显示其自己的自定义 404 错误,而不是从服务器发送的错误服务器。
我使用QWebPage::extension
来处理错误情况,它对于网络错误非常有效。
但是,如果服务器返回错误 404,同时返回错误页面,则会显示此页面,并且永远不会调用 QWebPage::extension
方法。
有没有办法强制 QtWebKit 调用错误处理程序并覆盖服务器错误页面?
最佳答案
在代码中跳来跳去足够长的时间,尝试各种事情之后,以下似乎至少解决了我的情况:
MyWebPageSubclass::MyWebPageSubclass(...) {
connect(networkAccessManager(), SIGNAL(finished(QNetworkReply*)), this, SLOT(handleNetworkFinished(QNetworkReply*)));
// ...
}
void MyWebPageSubclass::handleNetworkFinished(QNetworkReply *reply) {
bool ok = false;
int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(&ok);
if (ok && httpStatus / 100 != 1 && httpStatus / 100 != 2 && httpStatus / 100 != 3) {
if (!supportsExtension(ErrorPageExtension)) {
return;
}
ErrorPageExtensionOption option;
option.domain = Http;
option.error = httpStatus;
option.url = reply->url();
option.errorString = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
ErrorPageExtensionReturn output;
if (!extension(ErrorPageExtension, &option, &output)) {
return;
}
mainFrame()->setContent(output.content, output.contentType, output.baseUrl);
}
}
关于qt - 覆盖 QtWebkit 中的 HTTP 错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279684/