怎么说 QWebPage 不加载特定类型的资源,例如JS,CSS或PNG?

有帮助吗?

解决方案

解决方案是扩展 QNetworkAccessManager 班级和覆盖是虚拟方法 QNetworkAccessManager::createRequest 在我们的实施中,我们检查了请求的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"

其他提示

我实际上在同样的问题上挣扎,Piotr解决方案是假设带有文件扩展名的URL,不幸的是,情况并非总是如此。

脚趾可能会得到哑剧型,但只有在我们得到回应之后,这才是迟到的。

我们试图获得元素上下文请求资源,说是否是 <img> 元素或 <link> 获得CSS,但是 req.originatingObject()只给我们一个 qwebframe。例如,我知道在Mozilla代码中可以做到这一点。

顺便说一句,关闭 JavaScript自动加载图像 将防止加载图像和脚本。

如果您的目标是防止网页更改,您可以查看

virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);

在qwebpage中。您可以检查请求并返回 false 如果您想防止请求发送。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top