qt - 覆盖 QtWebkit 中的 HTTP 错误页面

标签 qt qtwebkit

我想在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/

相关文章:

c++ - 查找单实例 Qt 应用程序的 QWidget

Python 2.7.11 - 导入错误 : cannot import name QtWebKit - Kali Linux/Debian 8

c++ - 让 QtWebKit 在 Qt Creator 中工作

qt - 如何获取 iframe/frame QWebElement 的 QWebFrame?

javascript - 如何使用 Ranorex 以编程方式检查 ng-model 绑定(bind)输入字段的值?

c++ - Qt - 将空指针(原始数据)转换为 QImage 并将其显示在标签上

c++ - 我应该在堆上创建一个新的 QDomDocument 吗?

qt - Qt qmake工具dry run模式如何实现

macos - 在 OS X 上的 QT4 中启用 OpenGL 核心配置文件

c++ - Qt5 WebKit 未检测到 NPAPI 插件