QWebEngineUrlSchemeHandler Class

QWebEngineUrlSchemeHandler クラスは、カスタム URL スキームを処理するための基本クラスです。詳細...

ヘッダー #include <QWebEngineUrlSchemeHandler>
CMake: find_package(Qt6 REQUIRED COMPONENTS WebEngineCore)
target_link_libraries(mytarget PRIVATE Qt6::WebEngineCore)
qmake: QT += webenginecore
継承: 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も参照してください

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.