QWebEngineUrlSchemeHandler Class
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 |
详细说明
广义上讲,自定义方案处理程序类似于通过 HTTP 提供服务的网络应用程序。不过,由于自定义方案是直接集成到网络引擎中的,因此在效率和安全性方面更具优势:既不需要生成和解析 HTTP 消息,也不需要通过套接字传输数据,更无法拦截或监控流量。
要实现QtWebEngine 的自定义 URL 方案,首先必须创建QWebEngineUrlScheme 的实例,并使用QWebEngineUrlScheme::registerScheme() 进行注册。
由于自定义方案是直接集成到网络引擎中的,因此不一定需要遵循适用于普通网络内容的标准安全规则。根据所选配置的不同,通过自定义方案提供的内容可以访问本地资源,也可以设置为忽略内容安全策略规则,或者完全拒绝访问任何其他内容。如果要通过正常内容进行访问,请确保启用跨源访问,如果通过 HTTPS 访问,请将其标记为安全。
注意: 确保在 QGuiApplication 或QApplication 对象实例化之前创建并注册方案对象。
然后,必须创建一个派生自 QWebEngineUrlSchemeHandler 的类,并重新实现requestStarted() 方法。
最后,通过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)
每当已注册方案的请求request 启动时,都会调用此方法。
所有自定义 URL 方案处理程序都必须重新实现该方法。请求是异步的,不需要立即处理。
另请参阅 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.