QWebEngineUrlSchemeHandler Class

QWebEngineUrlSchemeHandler 클래스는 사용자 지정 URL 스키마를 처리하기 위한 기본 클래스입니다. 더 보기...

Header: #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를 통해 제공되는 웹 애플리케이션과 유사합니다. 그러나 사용자 정의 스키마는 웹 엔진에 직접 통합되므로 효율성과 보안 측면에서 이점이 있습니다: HTTP 메시지를 생성 및 구문 분석하거나 소켓을 통해 데이터를 전송할 필요가 없으며 트래픽을 가로채거나 모니터링할 방법도 없습니다.

QtWebEngine 에 대한 사용자 정의 URL 스키마를 구현하려면 먼저 QWebEngineUrlScheme 인스턴스를 만들고 QWebEngineUrlScheme::registerScheme()를 사용하여 등록해야 합니다.

사용자 정의 스키마는 웹 엔진에 직접 통합되므로 일반 웹 콘텐츠에 적용되는 표준 보안 규칙을 반드시 따를 필요는 없습니다. 선택한 구성에 따라 사용자 정의 스키마를 통해 제공되는 콘텐츠에 로컬 리소스에 대한 액세스 권한을 부여하거나, 콘텐츠 보안 정책 규칙을 무시하도록 설정하거나, 반대로 다른 콘텐츠에 대한 액세스를 완전히 거부할 수 있습니다. 일반 콘텐츠에서 액세스하려면 교차 출처 액세스를 사용하도록 설정하고 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.