QWebEngineUrlSchemeHandler 类

QWebEngineUrlSchemeHandler 类是处理自定义 URL 方案的基类。 更多...

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

公共函数

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

详细描述

A custom scheme handler is, broadly speaking, similar to a web application served over HTTP. However, because custom schemes are integrated directly into the web engine, they have the advantage in terms of efficiency and security: There is no need for generating and parsing HTTP messages or for transferring data over sockets, nor any way to intercept or monitor the traffic.

要实现自定义 URL 方案为 QtWebEngine , you first have to create an instance of QWebEngineUrlScheme and register it using QWebEngineUrlScheme::registerScheme ().

As custom schemes are integrated directly into the web engine, they do not necessarily need to follow the standard security rules which apply to ordinary web content. Depending on the chosen configuration, content served over a custom scheme may be given access to local resources, be set to ignore Content-Security-Policy rules, or conversely, be denied access to any other content entirely. If it is to be accessed by normal content, ensure cross-origin access is enabled, and if accessed from HTTPS that it is marked as secure.

注意: Make sure that you create and register the scheme object before the QGuiApplication or QApplication 对象被实例化。

Then you must create a class derived from QWebEngineUrlSchemeHandler, and reimplement the requestStarted () 方法。

Finally, install the scheme handler object via QWebEngineProfile::installUrlSchemeHandler () 或 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);
}
					

另请参阅 QWebEngineUrlScheme .

成员函数文档编制

QWebEngineUrlSchemeHandler:: QWebEngineUrlSchemeHandler ( QObject * parent = nullptr)

构造新 URL 方案处理程序。

创建处理程序采用父级 parent .

[virtual noexcept] QWebEngineUrlSchemeHandler:: ~QWebEngineUrlSchemeHandler ()

删除自定义 URL 方案处理程序。

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

This method is called whenever a request request for the registered scheme is started.

This method must be reimplemented by all custom URL scheme handlers. The request is asynchronous and does not need to be handled right away.

另请参阅 QWebEngineUrlRequestJob .