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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。