特定の種類のリソースをロードしないようにQWebPageに伝える方法は?
-
14-10-2019 - |
質問
伝える方法 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
リクエストが送信されないようにしたい場合。