QWebEngineUrlSchemeHandler Class

Die Klasse QWebEngineUrlSchemeHandler ist eine Basisklasse für den Umgang mit benutzerdefinierten URL-Schemata. Mehr...

Kopfzeile: #include <QWebEngineUrlSchemeHandler>
CMake: find_package(Qt6 REQUIRED COMPONENTS WebEngineCore)
target_link_libraries(mytarget PRIVATE Qt6::WebEngineCore)
qmake: QT += webenginecore
Vererbt: QObject

Öffentliche Funktionen

QWebEngineUrlSchemeHandler(QObject *parent = nullptr)
virtual ~QWebEngineUrlSchemeHandler()
virtual void requestStarted(QWebEngineUrlRequestJob *request) = 0

Detaillierte Beschreibung

Ein benutzerdefinierter Schema-Handler ist im Großen und Ganzen mit einer Webanwendung vergleichbar, die über HTTP ausgeliefert wird. Da benutzerdefinierte Schemata jedoch direkt in die Web-Engine integriert sind, haben sie den Vorteil, dass sie effizienter und sicherer sind: Es besteht keine Notwendigkeit, HTTP-Nachrichten zu generieren und zu parsen oder Daten über Sockets zu übertragen, und es gibt auch keine Möglichkeit, den Datenverkehr abzufangen oder zu überwachen.

Um ein benutzerdefiniertes URL-Schema für QtWebEngine zu implementieren, müssen Sie zunächst eine Instanz von QWebEngineUrlScheme erstellen und diese mit QWebEngineUrlScheme::registerScheme() registrieren.

Da benutzerdefinierte Schemata direkt in die Web-Engine integriert sind, müssen sie nicht unbedingt die Standard-Sicherheitsregeln befolgen, die für gewöhnliche Webinhalte gelten. Je nach gewählter Konfiguration können Inhalte, die über ein benutzerdefiniertes Schema bereitgestellt werden, Zugriff auf lokale Ressourcen erhalten, so eingestellt werden, dass sie Content-Security-Policy-Regeln ignorieren, oder umgekehrt, dass ihnen der Zugriff auf andere Inhalte vollständig verweigert wird. Wenn normale Inhalte darauf zugreifen sollen, stellen Sie sicher, dass der herkunftsübergreifende Zugriff aktiviert ist, und wenn der Zugriff über HTTPS erfolgt, dass er als sicher gekennzeichnet ist.

Hinweis: Stellen Sie sicher, dass Sie das Schema-Objekt erstellen und registrieren , bevor das QGuiApplication oder QApplication Objekt instanziiert wird.

Dann müssen Sie eine Klasse erstellen, die von QWebEngineUrlSchemeHandler abgeleitet ist, und die Methode requestStarted() neu implementieren.

Schließlich installieren Sie das Schema-Handler-Objekt über QWebEngineProfile::installUrlSchemeHandler() oder QQuickWebEngineProfile::installUrlSchemeHandler().

class MySchemeHandler : public QWebEngineUrlSchemeHandler
{
public:
    MySchemeHandler(QObject *parent = nullptr);
    void requestStarted(QWebEngineUrlRequestJob *job)
    {
        const QByteArray method = job->requestMethod();
        const QUrl url = job->requestUrl();

        if (isValidUrl(url)) {
            if (method == QByteArrayLiteral("GET"))
                job->reply(QByteArrayLiteral("text/html"), makeReply(url));
            else // Unsupported method
                job->fail(QWebEngineUrlRequestJob::RequestDenied);
        } else {
            // Invalid URL
            job->fail(QWebEngineUrlRequestJob::UrlNotFound);
        }
    }
    bool isValidUrl(const QUrl &url) const // ....
    QIODevice *makeReply(const QUrl &url) // ....
};

int main(int argc, char **argv)
{
    QWebEngineUrlScheme scheme("myscheme");
    scheme.setSyntax(QWebEngineUrlScheme::Syntax::HostAndPort);
    scheme.setDefaultPort(2345);
    scheme.setFlags(QWebEngineUrlScheme::SecureScheme);
    QWebEngineUrlScheme::registerScheme(scheme);

    // ...
    QApplication app(argc, argv);
    // ...

    // installUrlSchemeHandler does not take ownership of the handler.
    MySchemeHandler *handler = new MySchemeHandler(parent);
    QWebEngineProfile::defaultProfile()->installUrlSchemeHandler("myscheme", handler);
}

Siehe auch QWebEngineUrlScheme.

Dokumentation der Mitgliedsfunktionen

QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(QObject *parent = nullptr)

Konstruiert einen neuen URL-Schema-Handler.

Der Handler wird mit dem übergeordneten parent erstellt.

[virtual noexcept] QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler()

Löscht einen benutzerdefinierten URL-Schema-Handler.

[pure virtual] void QWebEngineUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request)

Diese Methode wird aufgerufen, wenn eine Anfrage request für das registrierte Schema gestartet wird.

Diese Methode muss von allen benutzerdefinierten URL-Schema-Handlern reimplementiert werden. Die Anfrage ist asynchron und muss nicht sofort bearbeitet werden.

Siehe auch QWebEngineUrlRequestJob.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.