Jak odłożyć QWebPage
, aby nie załadować określonego rodzaju zasobów, takich jak js, css czy png?Jak poinformować QWebPage, aby nie ładowało określonego rodzaju zasobów?
Odpowiedz
Rozwiązaniem jest rozszerzenie klasy QNetworkAccessManager
i zastąpienie tej wirtualnej metody. QNetworkAccessManager::createRequest
W naszej implementacji sprawdzamy ścieżkę żądanego adresu URL i jeśli jest to ten, którego nie chcemy pobierać, tworzymy i przekazujemy puste żądanie zamiast ten prawdziwy. Poniżej znajduje się pełny, działający przykład.
#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"
Jeśli twoim celem jest zapobieganie stronie internetowej zmianę, można spojrzeć na
virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type);
w QWebPage. Możesz sprawdzić żądanie i zwrócić false
, jeśli chcesz zapobiec wysłaniu żądania.
To jest złe z tego samego powodu, dla którego odpowiedź hmuelnera jest błędna. Z [docs] (http://developer.qt.nokia.com/doc/qt-4.8/qwebpage.html#acceptNavigationRequest) * Ta funkcja jest wywoływana za każdym razem, gdy WebKit żąda ** nawigacji ** ramki do zasobu określonego przez żądanie za pomocą określonego typu typu nawigacji. * –
Tak naprawdę mam problem z tym samym, rozwiązanie Piotra zakłada adresy URL z rozszerzeniami plików, niestety nie zawsze tak jest.
można uzyskać mime, ale tylko po otrzymaniu odpowiedzi, a to jest zbyt późno.
staraliśmy się kontekst elementu żądającego zasobów, powiedzieć, czy jest to element <img>
lub <link>
dostać CSS, ale req.originatingObject()
daje nam tylko QWebFrame. Wiem na przykład, że było to możliwe w kodzie mozilla.
BTW, wyłączając JavaScript i zdjęć obciążenie auto uniemożliwi ładowanie obrazów i skryptów.
Możesz spróbować utworzyć żądanie HEAD tylko po to, aby uzyskać nagłówki, dzięki czemu możesz sprawdzić nagłówek Content-Type i podjąć decyzję na podstawie jego wartości. –
- 1. Jak poinformować xjc, aby nie przechodził przez xs: import?
- 2. Jak znaleźć wszystkie zasoby danego rodzaju?
- 3. QWebView vs QWebPage
- 4. konfiguracja Cloudfront, aby nigdy nie pobierać zasobów
- 5. Jak poinformować o zaćmieniu, aby automatycznie wyświetlało pomoc dotyczącą treści?
- 6. Jak mogę poinformować Playframework, aby używał mojego korporacyjnego proxy?
- 7. Jak używać Firebuga, aby poinformować mnie, jaki JavaScript jest uruchamiany?
- 8. Jak mogę poinformować UIGestureRecognizer, aby anulował istniejący dotyk?
- 9. Czy dobrą praktyką jest użycie atrybutu [Przestarzałe], aby poinformować programistów, aby nie używali części interfejsu API
- 10. Powiedz StructureMap, aby użyć określonego konstruktora.
- 11. Tworzenie cały zrzut ekranu strony używając QWebPage
- 12. Angular 2: W jaki sposób poinformować SystemJS, aby używał pakietu?
- 13. ViewPager Activity, aby powiadomić Fragment określonego zdarzenia
- 14. nie ManualFloat użyciu określonego Rect
- 15. Czy mimo to należy poinformować program Visual Studio, aby nie otwierać wszystkich dokumentów po załadowaniu rozwiązania?
- 16. Jak sprawdzić, kiedy należy użyć określonego rodzaju wskaźnika podobieństwa? Odległość euklidesowa a korelacja Pearsona
- 17. Jak poinformować Buildout, aby zainstalował jajko z adresu URL (bez pypi)?
- 18. Nie wiadomo konwersji argumentu od rodzaju wpisywać &
- 19. Jak poinformować pakiet SDK programu DocumentDB, aby używał polecenia camelCase podczas kwerendy linq?
- 20. W jaki sposób poinformować kręgosłupa, że model nie jest nowy
- 21. Theme.AppCompat.Light.DarkActionBar - Nie znaleziono zasobów
- 22. błąd nie mógł dequeue widok rodzaju UICollectionElementKindCell
- 23. Jak skonfigurować wbudowany pomost, aby uzyskać dostęp do zasobów Jersey?
- 24. Jak mogę powiedzieć MacVimowi, aby zawsze używał określonego podświetlania składni dla określonego typu pliku?
- 25. Czy istnieje atrybut, którego można użyć na właściwość, aby poinformować DataGridView, jak sformatować kolumnę?
- 26. Jak przekazać Bootstrap Carousel, aby przejść do określonego indeksu?
- 27. Poinformować ikonę aplikacji za pomocą javascript
- 28. Jak poinformować Insight aplikacji o ignorowaniu 404 odpowiedzi
- 29. javax.servlet.jsp.PageContext nie mogą być rozwiązane do rodzaju
- 30. HttpClient nie mogą być rozwiązane do rodzaju
Eleganckie rozwiązanie! – ismail
Czy istnieje sposób sprawdzenia nie według rozszerzenia, ale według typu zawartości? – Zelid
@Zelid Tak. Zobacz 'QNetworkRequest :: header()' i 'QNetworkReply :: header()' –