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) | |
纯虚 | ~QWebEngineUrlSchemeHandler() |
纯虚 virtual void | requestStarted(QWebEngineUrlRequestJob *request) = 0 |
详细说明
自定义方案处理程序,从广义上讲,类似于通过 HTTP 提供的 Web 应用程序。然而,由于自定义方案直接集成到 Web 引擎中,它们在效率和安全性方面具有优势:无需生成和解析 HTTP 消息或通过套接字传输数据,也没有拦截或监控流量的方式。
为了实现 QtWebEngine 的自定义 URL 方案,您首先必须创建一个 QWebEngineUrlScheme 实例,并使用 QWebEngineUrlScheme::registerScheme() 进行注册。
由于自定义方案直接集成到 Web 引擎中,它们不一定需要遵循适用于普通网络内容的标准安全规则。根据选择的配置,可能允许通过自定义方案访问本地资源,或设置为忽略内容安全策略规则,或者相反,完全拒绝访问任何其他内容。如果要从普通内容中访问,确保已启用跨域访问,如果从 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 创建。
[虚拟 noexcept]
QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler()
删除自定义 URL 方案处理程序。
[纯虚函数]
void QWebEngineUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request)
每当启动对已注册方案的请求时,都会调用此方法。
所有自定义URL方案处理程序都必须重新实现此方法。请求是异步的,不需要立即处理。
查看相关内容QWebEngineUrlRequestJob。
© 2024 Qt公司有限公司。 本文档中的文档贡献权属于各自的拥有者。 本文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款授予的。 Qt及其相关标志是芬兰及其它国家中Qt公司的商标。所有其他商标均为其各自拥有者的财产。