Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Intercept QML Webview request
QtWS25 Last Chance

Intercept QML Webview request

Scheduled Pinned Locked Moved Unsolved General and Desktop
1 Posts 1 Posters 715 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    valeryz
    wrote on last edited by valeryz
    #1

    I was hoping someone could help me with this. I would like to intercept a url that is set in QML webview to inject particular headers. I am subclassing QQmlNetworkAccessManagerFactory. (I use Qt5.7) but it does not seem to work. I never get inside createRequest method.
    Here's my code:

    networkaccessmanager.cpp:
    #include "networkaccessmanager.h"

    NetworkAccessManager::NetworkAccessManager(QObject *parent) :
    QNetworkAccessManager(parent)
    {
    }

    QNetworkReply* NetworkAccessManager::get(const QNetworkRequest &request) {
    qDebug() << "Url path: " << request.url().path();
    return NetworkAccessManager::get(request);
    }

    QNetworkReply* NetworkAccessManager::createRequest(Operation op, const QNetworkRequest &req, QIODevice outgoingData) {
    qDebug() << "Create request"; <------ never get here
    QNetworkReply
    reply = QNetworkAccessManager::createRequest(op, req, outgoingData);
    return reply;
    }

    NetworkAccessManagerFactory::NetworkAccessManagerFactory(QObject *parent) :
    QObject(parent)
    {
    }

    QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent)
    {
    NetworkAccessManager *nam = new NetworkAccessManager(parent);
    return nam;
    }

    networkaccessmanager.h:
    #ifndef NETWORKACCESSMANAGER_H
    #define NETWORKACCESSMANAGER_H

    #include <QQmlNetworkAccessManagerFactory>
    #include <QNetworkReply>
    #include <QNetworkRequest>

    class NetworkAccessManager : public QNetworkAccessManager
    {
    Q_OBJECT
    public:
    NetworkAccessManager(QObject parent = 0);
    QNetworkReply
    get(const QNetworkRequest &request);
    protected:
    virtual QNetworkReply* createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData = Q_NULLPTR);
    };

    class NetworkAccessManagerFactory : public QObject, public QQmlNetworkAccessManagerFactory
    {
    Q_OBJECT
    public:
    explicit NetworkAccessManagerFactory(QObject parent = 0);
    virtual QNetworkAccessManager
    create(QObject parent);
    private:
    QNetworkAccessManager
    m_networkManager;
    };
    #endif // NETWORKACCESSMANAGER_H

    main.cpp:
    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    #include <QQmlComponent>
    #include <QtWebView>

    #include "networkaccessmanager.h"

    int main(int argc, char *argv[])
    {
    QGuiApplication a(argc, argv);

    QtWebView::initialize();
    
    QQmlApplicationEngine engine;
    engine.setNetworkAccessManagerFactory(new NetworkAccessManagerFactory);
    
    QQmlComponent component(&engine, QUrl("qrc:/webView.qml"));
    if (component.status() != component.Ready) {
        qWarning() << "Error:"+ component.errorString();
    }
    
    QObject* object = component.create();
    if (object == 0) {
        qWarning() << "Qml component was not created";
    }
    
    return a.exec();
    

    }

    webView.qml:
    import QtQuick 2.2
    import QtQuick.Controls 2.0
    import QtWebView 1.1
    import QtQuick.Layouts 1.1
    import QtQuick.Controls.Styles 1.2

    ApplicationWindow {
    flags: Qt.FramelessWindowHint
    visible: true
    width: 500
    height: 500
    WebView {
    id: webView
    anchors.fill: parent
    objectName: "webView"
    url: "https://google.ca"
    }
    }

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved