class QWebEngineUrlSchemeHandler#

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

Inheritance diagram of PySide6.QtWebEngineCore.QWebEngineUrlSchemeHandler

简介#

方法#

虚方法#

注意:

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

详细描述#

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

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

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

注意:

确保在实例化 QGuiApplication 或 QApplication 对象之前创建和注册方案对象。

然后必须创建一个从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])#
参数:

parentQObject

构造一个新的URL方案处理器。

处理程序创建时带有父对象 parent

抽象 requestStarted(arg__1)#
参数:

arg__1QWebEngineUrlRequestJob

当开始对已注册方案的请求 request 时,将调用此方法。

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