- class QWebEngineUrlSchemeHandler#
QWebEngineUrlSchemeHandler
类是处理自定义 URL 方案的基础类。 更多…简介#
方法#
def
__init__()
虚方法#
def
requestStarted()
注意:
本文档可能包含从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); }
另请参见
- __init__([parent=None])#
- 参数:
parent –
QObject
构造一个新的URL方案处理器。
处理程序创建时带有父对象
parent
。- 抽象 requestStarted(arg__1)#
- 参数:
arg__1 –
QWebEngineUrlRequestJob
当开始对已注册方案的请求
request
时,将调用此方法。所有自定义 URL 方案处理程序都必须重写此方法。请求是异步的,不需要立即处理。