Документация
ОС Аврора 5.2.0

InAppTab

InAppTab — это компонент, позволяющий приложению запускать отдельную вкладку WebView как внешнее приложение, но с возможностью управлять процессом загрузки и получать соответствующие сигналы. Каждый экземпляр InAppTab создаёт собственный процесс WebView через приватный D-Bus-канал.

Для интеграции InAppTab в приложение нужно выполнить лишь три шага:

  1. Подключить библиотеку и зарегистрировать QML-типы.
  2. Добавить разрешение InAppTab в .desktop.
  3. Использовать компонент InAppTab в QML, подписавшись на сигналы и вызывая open().

Компонент не требует дополнительной настройки, автоматически создаёт выделенный процесс WebView и обеспечивает чистое взаимодействие с ним в рамках приложения.

Содержание:

Подключение компонента

Ниже приведён минимальный пример интеграции компонента в приложение:

  1. Подключить библиотеку InAppTab.

    • Для CMake:

      В проект необходимо добавить зависимость от библиотеки:

      find_package(Qt5 COMPONENTS Core Qml Gui Quick DBus REQUIRED)
      target_link_libraries(${PROJECT_NAME}
          PRIVATE
              Qt5::Quick
              Qt5::Qml
              Qt5::DBus
              inapptab
              ${AURORA_LDFLAGS}
      )
      
    • Для qmake не трубуется дополнительное подключение зависимостей.

  2. Зарегистрировать QML-типы.

    В main.cpp нужно зарегистрировать классы для использования в QML:

    qmlRegisterType<InAppTab>("ru.auroraos.InAppTab", 1, 0, "InAppTab");
    
    // регистрация перечисления с кодами ошибок
    qRegisterMetaType<LoadError::LoadErrorType>("LoadError::LoadErrorType");
    qmlRegisterUncreatableType<LoadError>(
        "ru.auroraos.InAppTab", 1, 0,
        "LoadError", "Enum only"
    );
    

    Примечание. LoadError регистрируется как Uncreatable, чтобы в QML были доступны только значения перечисления (enum).

  3. Добавить разрешение в .desktop.

    Для работы InAppTab требуется предоставить приложению разрешение:

    [X-Application]
    Permissions=…;InAppTab;…
    

    Без этого приложение не сможет запускать InAppTab-процессы.

Использование компонента

  1. Использование InAppTab в QML.

    Создание компонента:

    InAppTab {
        id: inAppTab
        onLoadStart: {
            console.log("Начало загрузки:", url)
        }
        onLoadEnd: {
            console.log("Загрузка завершена:", url)
        }
        onLoadError: {
            if (error === LoadError.NavigationFailed)
                console.log("Навигация не удалась:", url)
            else
                console.log("Неизвестная ошибка:", url)
        }
        onClosed: {
            console.log("InAppTab закрыт")
        }
    }
    

    Доступные сигналы:

    • LoadStart(url) — начало загрузки страницы;
    • LoadEnd(url) — успешное завершение;
    • LoadError(url, error) — ошибка загрузки (в том числе процесс не запущен);
    • Closed() — вкладка была закрыта пользователем.
  2. Открытие URL.

    Для открытия страницы вызывается метод:

    inAppTab.open("https://google.com")
    

    Каждый вызов open() создаёт новый WebView-процесс через приватное соединение D-Bus.

  3. Полный пример QML-страницы:

    Page {
        PageHeader {
            title: qsTr("Запуск процессов")
        }
        Column {
            anchors.top: header.bottom
            spacing: 4 * Theme.paddingLarge
            Button {
                text: qsTr("Открыть вкладку")
                width: Theme.buttonWidthLarge
                anchors.horizontalCenter: parent.horizontalCenter
                onClicked: inAppTab.open("https://google.com")
            }
        }
        InAppTab {
            id: inAppTab
            onLoadStart: console.log("Загрузка начата:", url)
            onLoadEnd: console.log("Загрузка завершена:", url)
            onLoadError: console.log("Ошибка:", error, url)
            onClosed: console.log("Вкладка закрыта")
        }
    }
    

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.