qt - 如何告诉QWebPage不要加载特定类型的资源?

标签 qt qtwebkit qnetworkaccessmanager qwebpage

如何告诉QWebPage不要加载特定类型的资源,例如js,css或png?

最佳答案

解决方案是扩展QNetworkAccessManager类并覆盖其虚拟方法QNetworkAccessManager::createRequest在我们的实现中,我们检查请求的URL的路径,如果它是我们不想下载的URL,则我们创建并移交一个空请求,而不是真正的一个。
下面是一个完整的工作示例。

#include <QApplication>
#include <QUrl>

#include <QtWebKit/QWebPage>
#include <QtWebKit/QWebFrame>

#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QDebug>


class NAM : public QNetworkAccessManager {

    Q_OBJECT

protected:

    virtual QNetworkReply * createRequest(Operation op,
                                          const QNetworkRequest & req,
                                          QIODevice * outgoingData = 0) {

        if (req.url().path().endsWith("css")) {
            qDebug() << "skipping " << req.url();
            return QNetworkAccessManager::createRequest(QNetworkAccessManager::GetOperation,
                                                        QNetworkRequest(QUrl()));
        } else {
            return QNetworkAccessManager::createRequest(op, req, outgoingData);
        }
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWebPage page;
    NAM nam;

    page.setNetworkAccessManager(&nam);
    page.mainFrame()->load(QUrl("http://google.com"));

    app.exec();
}

#include "main.moc"

关于qt - 如何告诉QWebPage不要加载特定类型的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4575245/

相关文章:

c++ - 使用 Qt 进行 Android 开发

javascript - 奇怪的浏览器描述PyQt

python - PyQT5为什么get请求响应总是为null

c++ - 文件下载问题

c++ - 应用程序QT崩溃(带进度条的ftp下载)

c++ - 不使用 readyRead() 信号从 QTcpSocket 读取

c++ - 获取QImage像素坐标

c++ - 如何修复 "GStreamer-CRITICAL **: gst_sample_get_buffer: assertion ' GST_IS_SAMPLE(示例 )' failed"

c++ - QWebView内存释放

python - 为什么 QWebView.loadFinished 在某些网站上被多次调用,例如YouTube?