17

QWebPagejs、css、png などの特定の種類のリソースを読み込まないようにするにはどうすればよいですか?

4

3 に答える 3

31

解決策は、クラスを拡張して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"
于 2011-01-03T20:32:34.597 に答える
0

私は実際に同じ問題に苦しんでいます.Piotrソリューションは、ファイル拡張子を持つURLを想定しています.残念ながら、これは常に当てはまるとは限りません.

mime-type を取得することは可能ですが、応答を取得した後でのみ可能であり、これはオフコアから後期までです。

リソースを要求する要素コンテキストを取得しようとしました。たとえば、それが<img>要素であるか<link>CSS を取得するかですが、 QWebFramereq.originatingObject() しか得られません。たとえば、これが mozilla コードで可能だったことを知っています。

ところで、 javascript自動読み込み画像をオフにすると、画像とスクリプトの読み込みが妨げられます。

于 2014-03-23T10:39:25.540 に答える
-1

Web ページが変更されないようにすることが目的の場合は、以下を参照してください。

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

QWebページで。リクエストが送信されないようにする場合は、リクエストを検査して返すことができfalseます。

于 2012-01-30T16:11:04.470 に答える