¿Cómo decirle al QWebPage
que no cargue tipos específicos de recursos como js, css o png?¿Cómo decirle a QWebPage que no cargue tipos específicos de recursos?
Respuesta
La solución es ampliar la clase QNetworkAccessManager
y anular su método virtual QNetworkAccessManager::createRequest
En nuestra implementación, verificamos la ruta de la URL solicitada y si es la que no queremos descargar creamos y entregamos una solicitud vacía en lugar de el original. A continuación se muestra un ejemplo completo y funcional.
#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"
Si su objetivo es evitar que la página web de cambiar, se puede echar un vistazo a
virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
en QWebPage. Puede inspeccionar la solicitud y devolver false
si desea evitar que se envíe la solicitud.
Esto es incorrecto por la misma razón que la respuesta de hmuelner es incorrecta. Desde [docs] (http://developer.qt.nokia.com/doc/qt-4.8/qwebpage.html#acceptNavigationRequest) * Esta función se invoca cada vez que WebKit solicita ** navegar ** frame al recurso especificado por solicitud por medio del tipo de tipo de navegación especificado. * –
En realidad, estoy luchando con el mismo problema, la solución de Piotr está asumiendo las URL con extensiones de archivo, lamentablemente este no es siempre el caso.
es posible obtener el tipo de mímica, pero solo después de que recibamos la respuesta 'y esto es demasiado tarde.
tratamos de conseguir el contexto elemento de solicitar los recursos, dicen que si se trata de un elemento <img>
o <link>
para obtener CSS, pero req.originatingObject()
sólo nos da una QWebFrame. , sé por ejemplo que esto fue posible en el código de mozilla.
Por cierto, apagar Javascript y imágenes de carga automática evitarán que la carga de imágenes y secuencias de comandos.
Puede intentar hacer una solicitud HEAD solo para obtener encabezados para que pueda verificar el encabezado Content-Type y tomar decisiones en función de su valor. –
- 1. ¿Puedo decirle al compilador Closure que, solo para tipos específicos, deje de cambiar el nombre de las propiedades?
- 2. ¿Cómo decirle a intelliJ IDEA que actualice mis clases y recursos en una aplicación de Grails?
- 3. ¿Cómo decirle a bash que no expanda $ _ variable?
- 4. Cómo decirle a RadioButtonList que NO genere una tabla
- 5. Espere a que TinyMCE cargue
- 6. Cómo puedo decirle a AngularJS que "actualice"
- 7. ¿Cómo decirle a NLog que registre excepciones?
- 8. ¿Cómo restringir los mensajes del actor a tipos específicos?
- 9. de dominio de recursos específicos del idioma
- 10. ¿Hay alguna forma de decirle a Visual Studio que no abra todos los documentos cuando cargue la solución?
- 11. ¿Cómo decirle a .hover() que espere?
- 12. Recursos específicos de los dispositivos de iPhone
- 13. Colección Backbone.Js con tipos específicos
- 14. Vim inoremap para tipos de archivos específicos
- 15. restringir la selección de carga de archivos a tipos específicos
- 16. LINQ - tipos de clases específicos de grupo
- 17. ¿Cómo hacer que Symfony2 cargue CSS, archivos JS directamente y no a través de PHP?
- 18. Espere a que se cargue la imagen antes de continuar
- 19. ¿Cómo decirle a apache que LocationMatch está opuesto a esto?
- 20. ¿Cómo decirle al depurador de LLDB que no maneje SIGBUS?
- 21. ¿Cómo puedo decirle a poedit que ignore los errores de texto que no son ASCII?
- 22. Cómo decirle a un Applescript que deje de ejecutar
- 23. Cómo decirle a Fluiber NHibernate que no debe asignar una propiedad de clase
- 24. Cargue todos los recursos de localización en el inicio
- 25. ¿Cómo evitar que Doctrine cargue perezosamente relaciones uno a uno?
- 26. ¿Cómo se excluyen tipos específicos de la serialización?
- 27. ¿Cómo leer los datos de QNetworkReply utilizados por QWebPage?
- 28. ¿Cómo puedo almacenar tipos de Java, permitiendo solo algunos específicos?
- 29. Restringir atributo personalizado para que se pueda aplicar solo a tipos específicos en C#?
- 30. Caracteres extraños en Javascript que causan que no se cargue
¡Solución elegante! – ismail
¿Hay alguna forma de verificar no por extensión sino por tipo de contenido? – Zelid
@Zelid Sí. Ver 'QNetworkRequest :: header()' y 'QNetworkReply :: header()' –