PySide6.QtWebEngineCore.QWebEngineUrlSchemeHandler

class QWebEngineUrlSchemeHandler

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

PySide6.QtWebEngineCore.QWebEngineUrlSchemeHandler 的继承图

概要

方法

虚拟方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

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

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

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

注意

确保在实例化 QGuiApplication 或 QApplication 对象之前创建并注册 scheme 对象。

然后你必须创建一个从QWebEngineUrlSchemeHandler派生的类,并重新实现requestStarted()方法。

最后,通过installUrlSchemeHandler()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

__init__([parent=None])
Parameters:

父对象QObject

构建一个新的URL方案处理程序。

处理程序是用父级 parent 创建的。

abstract requestStarted(request)
Parameters:

请求QWebEngineUrlRequestJob

每当注册方案的请求request开始时,就会调用此方法。

此方法必须由所有自定义URL方案处理程序重新实现。请求是异步的,不需要立即处理。