質問

伝える方法 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を想定していますが、残念ながらこれは必ずしもそうではありません。

TOEはMIMEタイプを取得する可能性がありますが、応答を取得した後にのみ、これはオフコアから遅れています。

リソースを要求する要素コンテキストを取得しようとしました。 <img> 要素または <link> CSSを取得するために、しかし req.originatingObject()私たちにaを与えるだけです qwebframe。たとえば、これがMozillaコードで可能だったことを知っています。

ところで、オフになります JavaScript自動ロード画像 画像やスクリプトの読み込みを防ぎます。

あなたの目標がウェブページの変更を防ぐことである場合、あなたは

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

qwebpageで。リクエストを検査して返すことができます false リクエストが送信されないようにしたい場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top