qt qtwebkit qnetworkaccessmanager qwebpage

qt - ¿Cómo decirle a QWebPage que no cargue un tipo específico de recursos?



qtwebkit qnetworkaccessmanager (3)

La solución es extender la clase QNetworkAccessManager e invalidar su método virtual QNetworkAccessManager::createRequest En nuestra implementación, verificamos la ruta de acceso de la URL solicitada y, si no queremos descargar, creamos y entregamos una solicitud vacía en lugar de el Real. A continuación se muestra un ejemplo completo, de trabajo.

#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"

¿Cómo decirle a QWebPage no cargue un tipo específico de recursos como js, ​​css o png?


Realmente estoy luchando con el mismo problema, la solución de Piotr está asumiendo las URL con extensiones de archivo, desafortunadamente este no es siempre el caso.

es posible obtener un tipo mimo, pero solo después de que obtengamos la respuesta ''y esto no sea una buena idea.

tratamos de obtener el contexto del elemento solicitando los recursos, digamos si es un elemento <img> o <link> para obtener CSS, pero req.originatingObject() solo nos da un QWebFrame . Sé, por ejemplo, que esto fue posible en el código de Mozilla.

Por cierto, apagar javascript y cargar automáticamente las imágenes evitará la carga de imágenes y scripts.


Si su objetivo es evitar que la página web cambie, puede echar un vistazo a

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

en QWebPage. Puede inspeccionar la solicitud y devolver el mensaje false si desea evitar que se envíe la solicitud.