QWebEngineUrlSchemeHandler Class
QWebEngineUrlSchemeHandler クラスは、カスタム URL スキームを処理するための基本クラスです。詳細...
Header: | #include <QWebEngineUrlSchemeHandler> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS WebEngineCore) target_link_libraries(mytarget PRIVATE Qt6::WebEngineCore) |
qmake: | QT += webenginecore |
Inherits: | QObject |
パブリック関数
QWebEngineUrlSchemeHandler(QObject *parent = nullptr) | |
virtual | ~QWebEngineUrlSchemeHandler() |
virtual void | requestStarted(QWebEngineUrlRequestJob *request) = 0 |
詳しい説明
カスタムスキームハンドラは、大まかに言えば、HTTP で提供される Web アプリケーションに似ています。しかし、カスタムスキームはウェブエンジンに直接統合されるため、効率とセキュリティの点で有利です:HTTPメッセージの生成や解析、ソケット経由のデータ転送、トラフィックの傍受や監視は必要ありません。
QtWebEngine 用のカスタム URL スキームを実装するには、まずQWebEngineUrlScheme のインスタンスを作成し、QWebEngineUrlScheme::registerScheme() を使用して登録する必要があります。
カスタムスキームはウェブエンジンに直接統合されるため、通常のウェブコンテンツに適用される標準的なセキュリティルールに必ずしも従う必要はありません。選択した設定によって、カスタムスキームを介して提供されるコンテンツは、ローカルリソースへのアクセスを与えられたり、Content-Security-Policyルールを無視するように設定されたり、逆に他のコンテンツへのアクセスを完全に拒否されたりします。通常のコンテンツからアクセスされる場合は、クロスオリジンアクセスが有効になっていることを確認し、HTTPSからアクセスされる場合はセキュアとマークされていることを確認してください。
注意: QGuiApplication またはQApplication オブジェクトがインスタンス化される前に、必ずスキーム・オブジェクトを作成して登録してください。
その後、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 と共に作成されます。
[virtual noexcept]
QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler()
カスタム URL スキームハンドラを削除します。
[pure virtual]
void QWebEngineUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request)
このメソッドは、登録されたスキームに対するリクエストrequest が開始されるたびに呼び出されます。
このメソッドは、すべてのカスタムURLスキームハンドラで再実装する必要があります。リクエストは非同期なので、すぐに処理する必要はありません。
QWebEngineUrlRequestJobも参照してください 。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。