PySide6.QtWebEngineCore.QWebEngineUrlSchemeHandler¶
- class QWebEngineUrlSchemeHandler¶
QWebEngineUrlSchemeHandler
类是用于处理自定义URL方案的基础类。更多…概要¶
方法¶
def
__init__()
虚拟方法¶
def
requestStarted()
注意
本文档可能包含从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); }
另请参阅
构建一个新的URL方案处理程序。
处理程序是用父级
parent
创建的。- abstract requestStarted(request)¶
- Parameters:
每当注册方案的请求
request
开始时,就会调用此方法。此方法必须由所有自定义URL方案处理程序重新实现。请求是异步的,不需要立即处理。