QWebEngineUrlSchemeHandler 类

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

头文件 #include <QWebEngineUrlSchemeHandler>
CMakefind_package(Qt6 REQUIRED COMPONENTS WebEngineCore)
target_link_libraries(mytarget PRIVATE Qt6::WebEngineCore)
qmakeQT += webenginecore
继承 QObject

公共函数

QWebEngineUrlSchemeHandler(QObject *parent = nullptr)
纯虚~QWebEngineUrlSchemeHandler()
纯虚 virtual voidrequestStarted(QWebEngineUrlRequestJob *request) = 0

详细说明

自定义方案处理程序,从广义上讲,类似于通过 HTTP 提供的 Web 应用程序。然而,由于自定义方案直接集成到 Web 引擎中,它们在效率和安全性方面具有优势:无需生成和解析 HTTP 消息或通过套接字传输数据,也没有拦截或监控流量的方式。

为了实现 QtWebEngine 的自定义 URL 方案,您首先必须创建一个 QWebEngineUrlScheme 实例,并使用 QWebEngineUrlScheme::registerScheme() 进行注册。

由于自定义方案直接集成到 Web 引擎中,它们不一定需要遵循适用于普通网络内容的标准安全规则。根据选择的配置,可能允许通过自定义方案访问本地资源,或设置为忽略内容安全策略规则,或者相反,完全拒绝访问任何其他内容。如果要从普通内容中访问,确保已启用跨域访问,如果从 HTTPS 访问,则确保将其标记为安全。

注意:请确保在实例化 QGuiApplicationQApplication 对象之前创建并注册方案对象。

然后,您必须创建一个从 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公司的商标。所有其他商标均为其各自拥有者的财产。