Spec-Zone.ru › Qt 5.15

Функции Qt WebEngine

Qt WebEngine поддерживает следующие функции:

  • Аудио- и видеокодеки
  • Инструменты разработчика Chromium
  • Сертификаты клиентов
  • Пользовательские схемы
  • Перетаскивание
  • Полный экран
  • DRM HTML5
  • Геолокация HTML5
  • Протокол HTTP/2
  • Встроенные диалоговые окна
  • API плагинов Pepper
  • Просмотр PDF-файлов
  • API жизненного цикла страницы
  • Печать в PDF
  • Модели процессов
  • Проверка правописания
  • Ощущение касания
  • Просмотр исходного кода
  • WebRTC
  • Веб-уведомления

Аудио- и видеокодеки

Qt WebEngine поддерживает формат файлов MPEG-4 Part 14 (MP4) только в том случае, если были включены необходимые проприетарные аудио- и видеокодеки, такие как H.264 и MPEG layer-3 (MP3). Проприетарные кодеки можно включить, передав следующий параметр инструменту configure при настройке Qt:

-webengine-proprietary-codecs

Например, следующий параметр можно передать при настройке Qt для его сборки на верхнем уровне:

configure -webengine-proprietary-codecs

Для получения дополнительной информации см. Параметры конфигурации Qt.

При использовании qmake для сборки только модуля Qt WebEngine можно использовать следующую команду (в этом примере исходный код Qt WebEngine находится в C:\qt\qtwebengine):

qmake C:\qt\qtwebengine -- -webengine-proprietary-codecs

Предупреждение: При распространении библиотек проприетарных кодеков необходимо приобрести лицензии на них.

FFmpeg — кроссплатформенное решение для записи, преобразования и потоковой передачи аудио- и видеоданных. Его можно настроить для использования с несколькими кодеками, что вызывает проблемы с лицензированием при распространении с библиотеками кодеков. Для некоторых кодеков доступны открытые реализации, такие как OpenH264.

Инструменты разработчика Chromium

Инструменты разработчика Chromium позволяют инспектировать и отлаживать проблемы с макетом и производительностью любого веб-контента.

Эту функцию можно проверить, запустив приложение Qt WebEngine с параметром командной строки --remote-debugging-port=[your-port] или установив переменную среды QTWEBENGINE_REMOTE_DEBUGGING, а затем используя браузер на основе Chromium (такой как Simple Browser или Nano Browser) для подключения к http://localhost:[your-port].

Страница инструментов разработчика Chromium также может быть показана внутри приложения. Для этого можно вызвать QWebEnginePage::setInspectedPage() для страницы, которую нужно инспектировать, что неявно загрузит инструменты разработчика на страницу this, или QWebEnginePage::setDevToolsPage() для инспектирования страницы this.

Соответствующие свойства QML — WebEngineView.devToolsView и WebEngineView.inspectedView.

Дополнительную информацию см. в разделе Отладка и профилирование Qt WebEngine.

Сертификаты клиентов

Некоторые веб-серверы, в частности многие внутренние сайты, требуют, чтобы клиент аутентифицировал себя с помощью сертификата, называемого сертификатом клиента. Qt WebEngine будет читать установленные в системных настройках сертификаты клиента в macOS и Windows, а на Linux — сертификаты, установленные в базе данных NSS. Сертификаты можно установить в базу данных NSS с помощью инструмента pk12util.

По умолчанию Qt WebEngine не будет предлагать серверам сертификаты клиента, так как это уникально идентифицирует пользователя и может нарушить ожидания конфиденциальности.

Чтобы включить поддержку сертификатов клиентов, приложение должно прослушивать сигналы QWebEnginePage::selectClientCertificate или WebEngineView.selectClientCertificate и выбрать один из предложенных сертификатов. Для приложений, которые могут переходить на недоверенные веб-сайты, рекомендуется всегда предлагать пользователю выбор перед уникальной идентификацией их для удаленного сервера.

Пользовательские схемы

Qt WebEngine позволяет приложению определять собственные пользовательские схемы URL-адресов со специализированными политиками безопасности и механизмами передачи.

Пользовательские схемы можно использовать для реализации альтернативных сетевых протоколов со всеми обычными политиками безопасности веб-страниц, привилегированных внутренних схем для отображения элементов пользовательского интерфейса или отладочной информации, защищенных схем с дополнительными ограничениями и так далее.

Дополнительную информацию см. в документации QWebEngineUrlScheme и QWebEngineUrlSchemeHandler.

Перетаскивание

Qt WebEngine поддерживает перетаскивание HTML5.

Эту функцию можно проверить, открыв демонстрацию перетаскивания HTML5, например, HTML5 Demos - Перетаскивание, HTML5 Demos - Простое перетаскивание или HTML5 Demos - Перетаскивание, автоматическая загрузка, в Simple Browser или Nano Browser.

Перетаскивание файлов в браузер на самом деле не является частью HTML5, но поддерживается. Его можно проверить, открыв HTML5 Demos - File API.

Поддержка этой функции была добавлена в Qt 5.7.0.

Полный экран

Qt WebEngine поддерживает просмотр веб-контента в полноэкранном режиме. Дополнительную информацию см. в документации WebEngineSettings.fullscreenSupportEnabled, WebEngineView.fullScreenRequested, QWebEngineSettings::FullScreenSupportEnabled и QWebEnginePage::fullScreenRequested.

Эту функцию можно проверить, воспроизведя видео с YouTube в Video Player или Nano Browser и нажав значок полноэкранного режима.

Поддержка этой функции была добавлена в Qt 5.6.0.

DRM HTML5

Qt WebEngine поддерживает просмотр защищенных DRM видео, если установлен плагин Widevine CDM. Плагин CDM — замена плагинов на базе Flash для отображения контента, защищенного DRM. Он доступен только в двоичном формате, поэтому может скрывать детали реализации дешифрования DRM. Его можно получить от сторонних разработчиков или из установки Google Chrome.

Qt WebEngine при запуске ищет плагин Widevine CDM в известных расположениях, таких как каталог установки Google Chrome по умолчанию или пути, специфичные для дистрибутива Linux. Однако расположение плагина также можно передать с помощью QTWEBENGINE_CHROMIUM_FLAGS используя widevine-path.

В Windows:

set QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="C:/some path/widevinecdm.dll"

В Linux:

export QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="/some path/libwidevinecdm.so"

В macOS:

export QTWEBENGINE_CHROMIUM_FLAGS=--widevine-path="/some path/libwidevinecdm.dylib"

Формат видео, наиболее часто используемый службами DRM, H.264, требует проприетарных аудио- и видеокодеков. Дополнительную информацию об включении кодеков см. в разделе Аудио- и видеокодеки.

Эту функцию можно проверить, воспроизведя видео в Simple Browser или Nano Browser с сайтов castLabs, Swank Motion Pictures, Inc. или Bitmovin Player.

Поддержка этой функции была добавлена в Qt 5.7.0.

Геолокация HTML5

Qt WebEngine поддерживает JavaScript Geolocation API с Qt Location в качестве бэкенда. Приложение должно явно разрешить функцию, используя QWebEnginePage::Geolocation или WebEngineView.Feature.

Если Qt Location было скомпилировано до Qt WebEngine, то эту функцию можно проверить, используя Maps и разрешив определение текущего местоположения пользователя. Обратите внимание, что в Windows необходимо подключить внешний GPS-приемник к приложению. Дополнительную информацию см. в Qt Positioning.

Поддержка этой функции была добавлена в Qt 5.5.0.

Протокол HTTP/2

Qt WebEngine поддерживает реализацию протокола HTTP/2 от Chromium.

Эту функцию можно проверить, открыв демонстрацию HTTP/2, например, Akamai HTTP/2 Demo, в Simple Browser или Nano Browser.

Встроенные диалоговые окна

Веб-страница может запросить диалоговые окна для следующих функций:

  • Ввод учетных данных пользователя для аутентификации HTTP и прокси-сервера
  • Отображение JavaScript-сообщений, подтверждения и запросов
  • Выбор цветов
  • Выбор файлов
  • Отображение сообщений об ошибках валидации формы

Qt WebEngine предоставляет стандартные диалоговые окна для этих функций. В приложениях на основе виджетов стандартные диалоговые окна основаны на QDialog, а в приложениях Qt Quick — на Qt Quick Controls 1 или Qt Quick Controls 2 (с Qt 5.8). Последние используются только на eglfs платформах.

Для явного принудительного использования диалоговых окон на основе Qt Quick Controls 1 или Qt Quick Controls 2 установите переменную среды QTWEBENGINE_DIALOG_SET в QtQuickControls1 или QtQuickControls2.

Диалоги Qt WebEngine Widgets можно настроить, переопределив функции QWebEnginePage::chooseFiles(), QWebEnginePage::javaScriptAlert(), QWebEnginePage::javaScriptConfirm() и QWebEnginePage::javaScriptPrompt().

Начиная с Qt 5.8, диалоги Qt Quick можно настроить, подключившись к сигналам WebEngineView::authenticationDialogRequested(), WebEngineView::javaScriptDialogRequested(), WebEngineView::colorDialogRequested(), WebEngineView::fileDialogRequested() и WebEngineView::formValidationMessageRequested(). Пример см. в примере Qt Quick Custom Dialogs для WebEngine.

Pepper Plugin API

Qt WebEngine поддерживает загрузку плагинов Pepper Plugin API (PPAPI), если WebEngineSettings::pluginsEnabled или QWebEngineSettings::PluginsEnabled задано.

За исключением плагина Adobe Flash Player, плагины необходимо загружать вручную, используя синтаксис командной строки Chromium с аргументом --register-pepper-plugins. Значение аргумента — список элементов, разделенных запятыми, которые содержат путь к файлу и один или несколько MIME-типов, разделенные точкой с запятой:

<file-path-plugin1>;<mime-type-plugin1>,<file-path-plugin2>;<mime-type1-plugin2>;<mime-type2-plugin2>

Например:

--register-pepper-plugins="libppapi_example.so;application/x-ppapi-example"

MIME-тип важен, поскольку он определяет, для каких вложений используется плагин.

Поддержка этой функции была добавлена в Qt 5.6.0.

Pepper Flash Player Plugin Support

Плагин Pepper Flash player можно загрузить автоматически, если он установлен в одном из следующих расположений, в зависимости от платформы:

  • Windows
    C:\Windows\SysWOW64\Macromed\Flash\pepflashplayer*.dll
    C:\Windows\System32\Macromed\Flash\pepflashplayer*.dll
  • OS X
    /Library/Internet Plug-Ins/PepperFlashPlayer/PepperFlashPlayer.plugin
  • Linux
    /usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so
    /usr/lib/adobe-flashplugin/libpepflashplayer.so
    /usr/lib/PepperFlash/libpepflashplayer.so
    /usr/lib64/chromium/PepperFlash/libpepflashplayer.so

Также можно загрузить Pepper Flash player из определенного расположения, используя аргументы командной строки:

--ppapi-flash-path=./libpepflashplayer.so

По умолчанию версия Flash установлена в 11.2.999.999. Можно использовать аргумент ppapi-flash-version= для установки другой версии Flash в формате major.minor.build.revision.

--ppapi-flash-version=16.0.0.235

Данную функцию можно протестировать в Simple Browser или Nano Browser, если плагин Adobe Flash PPAPI установлен и плагины включены в браузере. Для тестирования можно открыть страницу https://helpx.adobe.com/flash-player.html в браузере.

Просмотр PDF-файлов

Qt WebEngine поддерживает просмотр PDF-документов путем перехода к ним. Эта функция использует API расширений Chromium и плагин-просмотрщик PDF для отображения PDF-документов. Ее можно протестировать в Simple Browser или Nano Browser.

Для использования этой функции необходимо включить загрузку плагинов, используя QWebEngineSettings::PluginsEnabled или WebEngineSettings::pluginsEnabled.

Эту функцию можно включить (по умолчанию) или выключить через настройку QWebEngineSettings::PdfViewerEnabled или WebEngineSettings::pdfViewerEnabled.

Поддержка этой функции была добавлена в Qt 5.13.0.

API Жизненного цикла страницы

Qt WebEngine поддерживает спецификацию Page Lifecycle API — находящийся в разработке расширение HTML-стандарта, позволяющее агентам пользователя снизить использование ресурсов, замораживая или удаляя фоновые страницы. Функция реализована как в API Widgets, так и в QML API.

Пример использования QML API см. в примере WebEngine Lifecycle.

Поддержка этой функции была добавлена в Qt 5.14.0.

Обзор состояний жизненного цикла

Каждый элемент WebEngineView (или объект QWebEnginePage) может находиться в одном из трёх состояний жизненного цикла: активном, замороженном или удалённом. Эти состояния, подобно состояниям сна процессора, управляют использованием ресурсов веб-представлений.

Активное состояние — нормальное, без ограничений состояние веб-представления. Все видимые веб-представления всегда находятся в активном состоянии, как и все веб-представления, которые ещё не завершили загрузку. Только невидимые, неактивные веб-представления могут быть переведены в другие состояния жизненного цикла.

Замороженное состояние — состояние низкого использования процессора. В этом состоянии большинство источников задач HTML приостановлены (заморожены), и в результате большинство обработки событий DOM и выполнения JavaScript также будет приостановлено. Веб-представление должно быть невидимым, чтобы его можно было заморозить, так как отрисовка в этом состоянии невозможна.

Удалённое состояние — состояние экстремальной экономии ресурсов. В этом состоянии контекст просмотра веб-представления будет удалён, и соответствующий подпроцесс рендеринга будет остановлен. Использование процессора и памяти в этом состоянии практически сведено к нулю. При выходе из этого состояния веб-страница будет автоматически перезагружена. Процесс входа и выхода из состояния удаления подобен сериализации истории просмотра веб-представления и уничтожению представления, затем созданию нового представления и восстановлению его истории.

См. также WebEngineView::LifecycleState. Эквивалентом в API Widgets является QWebEnginePage::LifecycleState.

Свойства lifecycleState и recommendedState

Свойство lifecycleState типа WebEngineView — это свойство чтения/записи, которое управляет текущим состоянием жизненного цикла веб-представления. Это свойство разработано, чтобы максимально упростить переходы между состояниями. Например, разрешено замораживать веб-представление, которое в настоящее время воспроизводит музыку на заднем плане, останавливая музыку. Чтобы реализовать менее агрессивную стратегию экономии ресурсов, избегая прерывания видимой пользовательской фоновой активности, необходимо использовать свойство recommendedState.

Свойство recommendedState типа WebEngineView — это свойство только для чтения, которое вычисляет безопасный предел для свойства lifecycleState, учитывая текущую активность веб-представления. Например, в случае веб-представления, воспроизводящего музыку на заднем плане, рекомендованным состоянием будет Active, так как более агрессивное состояние остановит воспроизведение музыки. Если приложение хочет избежать прерывания фоновой активности, то оно должно избегать перевода веб-представления в более агрессивное состояние экономии ресурсов, чем то, которое дано свойством recommendedState.

См. также WebEngineView::lifecycleState и WebEngineView::recommendedState. Эквивалентами в API Widgets являются QWebEnginePage::lifecycleState и QWebEnginePage::recommendedState.

Расширения DOM

Свойство lifecycleState связано со спецификацией Page Lifecycle API, которая определяет два новых события DOM, freeze и resume, и добавляет новое свойство Document.wasDiscarded типа boolean. События freeze и resume срабатывают при переходе из состояния Active в состояние Frozen state, и наоборот. Свойство Document.wasDiscarded устанавливается в true при переходе из состояния Discarded в состояние Active.

Печать в PDF

Qt WebEngine поддерживает печать веб-страницы в PDF-файл. Дополнительная информация см. в QWebEnginePage::printToPdf() и WebEngineView.printToPdf.

Данную функцию можно протестировать с помощью примера Html2Pdf.

Поддержка этой функции была добавлена в Qt 5.7.0.

Модели процессов

Qt WebEngine использует несколько процессов ОС для изоляции веб-сайтов друг от друга и от клиентского приложения, повышая безопасность и надёжность. Поддерживаются следующие модели процессов, или способы разделения веб-сайтов между процессами ОС:

  • Процесс на экземпляр сайта
  • Процесс на сайт
  • Один процесс

Процесс на экземпляр сайта

Это модель по умолчанию. Страницы с разных сайтов помещаются в отдельные процессы, а отдельные посещения одного и того же сайта также изолированы.

Две веб-страницы считаются принадлежащими одному сайту, если они происходят с одного и того же зарегистрированного доменного имени (например, wikipedia.org) и схемы (например, https). Это аналогично политике одного источника, но поддомены игнорируются. Например, https://en.wikipedia.org/ и https://de.wikipedia.org/ принадлежат одному сайту.

Экземпляр сайта — это набор веб-страниц, принадлежащих одному сайту. Когда приложение явно загружает URL в Qt WebEngine (например, через QWebEnginePage::setUrl), для страницы создается новый экземпляр сайта. Однако, когда пользователь кликает по ссылкам на том же сайте, существующий экземпляр сайта просто расширяется дополнительными страницами.

Например, в примере Simple Browser, когда пользователь открывает две вкладки и явно вводит https://en.wikipedia.org/ в адресных строках, обе вкладки будут иметь свои отдельные процессы ОС (потому что явное введение URL создает новый экземпляр сайта). Однако, когда пользователь затем дважды щелкает по ссылкам на том же сайте, чтобы открыть больше вкладок, эти новые вкладки будут использовать один и тот же процесс ОС (потому что взаимодействие пользователя расширяет существующий экземпляр сайта).

Процесс на сайт

Страницы с разных сайтов помещаются в отдельные процессы. В отличие от процесса на экземпляр сайта, все посещения одного сайта будут использовать один процесс ОС.

Преимущество этой модели — меньшее потребление памяти, поскольку больше веб-страниц будут использовать общие процессы. Недостатки включают снижение безопасности, устойчивости и отзывчивости.

Чтобы включить эту модель, используйте аргумент командной строки --process-per-site. См. Использование аргументов командной строки.

Один процесс

Только для отладки режим одного процесса можно включить, используя аргумент командной строки --single-process. См. Использование аргументов командной строки и Отладка и профилирование Qt WebEngine.

Проверка орфографии

Qt WebEngine поддерживает интеграцию проверки орфографии в HTML-формы, чтобы пользователи могли отправлять сообщения с проверенной орфографией. Когда пользователь нажимает на подчеркнутое неправильно написанное слово, в контекстном меню по умолчанию отображаются до четырёх предложений. Выбор одного заменит неправильно написанное слово.

Для проверки орфографии требуется словарь. Поддерживаются словари из проекта Hunspell, но их необходимо скомпилировать в специальный двоичный формат. Словарь Hunspell состоит из двух файлов:

  • Файл .dic, представляющий собой словарь, содержащий слова для языка
  • Файл .aff, определяющий значение специальных флагов в словаре

Эти два файла можно преобразовать в формат bdic с помощью инструмента qwebengine_convert_dict, поставляемого вместе с Qt. При инициализации проверки орфографии Qt WebEngine попытается загрузить словари bdict и проверить их на соответствие.

Если QTWEBENGINE_DICTIONARIES_PATH установлено, проверка орфографии использует словари в указанной директории, не просматривая другие. В противном случае она использует директорию qtwebengine_dictionaries относительно исполняемого файла, если она существует. Если она не существует, она будет искать в QT_INSTALL_PREFIX/qtwebengine_dictionaries.

В macOS, в зависимости от того, как Qt WebEngine настроен во время сборки, существуют две возможности поиска данных проверки орфографии:

  • Словари Hunspell (по умолчанию) — используются словари .bdic, как и на других платформах
  • Нативные словари — используются API проверки орфографии macOS (что означает, что результаты будут зависеть от установленных словарей ОС)

Таким образом, в случае использования Hunspell Qt WebEngine будет искать в подкаталоге qtwebengine_dictionaries, расположенном внутри пакета приложения Resources, и также в директории Resources внутри пакета Qt-фреймворка.

Подводя итог, при использовании Hunspell рассматриваются следующие пути:

  • QTWEBENGINE_DICTIONARIES_PATH, если задано
  • QCoreApplication::applicationDirPath()/qtwebengine_dictionaries или QCoreApplication::applicationDirPath()/../Contents/Resources/qtwebengine_dictionaries (в macOS)
  • [QLibraryInfo::DataPath]/qtwebengine_dictionaries или путь/к/QtWebEngineCore.framework/Resources/qtwebengine_dictionaries (пакет Qt-фреймворка в macOS)

Проверка орфографии отключена по умолчанию и может быть включена на профиль с помощью метода QWebEngineProfile::setSpellCheckEnabled() в приложениях на основе виджетов и свойства WebEngineProfile.spellCheckEnabled в приложениях Qt Quick.

Язык, используемый для проверки орфографии, определяется на профиль и может быть задан с помощью метода QWebEngineProfile::setSpellCheckLanguages() или свойства WebEngineProfile.spellCheckLanguages.

Этот функционал можно проверить, собрав и запустив Пример проверки орфографии.

Поддержка этой функции была добавлена в Qt 5.8.0.

Прикосновение

Qt WebEngine поддерживает сенсорные устройства для навигации и взаимодействия с веб-страницами.

Приложения могут запретить использование сенсорных событий следующим образом:

  • Передача флага --touch-events=disabled в командной строке отключит поддержку сенсорных событий в JavaScript API (что означает, что ontouchstart и связанные обработчики не будут присутствовать в объекте document.window). Сенсорные события по-прежнему будут передаваться веб-страницам.
  • Установка объекта фильтра событий с помощью QObject::installEventFilter на объект-прокси фокуса просмотра WebEngine и фильтрация всех сенсорных событий.

Просмотр исходного кода

Qt WebEngine поддерживает просмотр исходного HTML-кода веб-страницы.

Эту функцию можно использовать из пользовательских меню или назначить на пользовательские события. Дополнительную информацию см. в WebEngineView::WebAction и QWebEnginePage::WebAction.

Эту функцию можно проверить, открыв веб-страницу в Простой браузере или Мини-браузере, а затем выбрав Page Source в контекстном меню. Пункт контекстного меню Page Source открывает просмотр исходного кода в новой вкладке.

Для открытия просмотра исходного кода в текущей вкладке также поддерживаются URL-адреса со схемой view-source URI. Например, вы можете ввести следующий URL-адрес в строку адреса, чтобы просмотреть исходный HTML-код веб-страницы qt.io:

view-source:https://www.qt.io/

Автозаполнение неполных URL-адресов со схемой view-source URI делает использование этой функции более удобным. Например, следующий неполный URL-адрес также загружает просмотр исходного кода веб-страницы qt.io:

view-source:qt.io

Поддержка этой функции была добавлена в Qt 5.8.0.

WebRTC

WebRTC предоставляет браузерам возможности Real-Time Communications (RTC) через простые API. Дополнительную информацию см. в WebEngineView.Feature и QWebEnginePage::Feature.

Этот функционал можно проверить, настроив веб-камеру или микрофон, а затем открыв https://test.webrtc.org/ в Простом браузере или Мини-браузере.

Веб-уведомления

Qt WebEngine поддерживает JavaScript Web Notifications API. Приложение должно явно разрешить эту функцию, используя QWebEnginePage::Notifications или WebEngineView.Notifications.

Поддержка этой функции была добавлена в Qt 5.13.0.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qtwebengine-features.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API