Spec-Zone.ru › Qt 5.14

Возможности Qt WebEngine

Qt WebEngine поддерживает следующие возможности:

  • Аудио- и видеокодеки
  • Инструменты разработчика Chromium
  • Сертификаты клиента
  • Пользовательские схемы
  • Перетаскивание
  • Полный экран
  • HTML5 DRM
  • 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 - API файлов.

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

Полный экран

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

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

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

HTML5 DRM

Qt WebEngine поддерживает просмотр защищённых DRM видео, если плагин Widevine DRM был установлен.

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

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

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

HTML5 Геолокация

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

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

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

Протокол HTTP/2

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

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

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

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

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

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 для Qt WebEngine.

API плагинов Pepper

Qt WebEngine поддерживает загрузку плагинов API плагинов Pepper (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

Плагин 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 виджетов, так и в QML-API.

Пример использования QML-API см. в Примере жизненного цикла Qt WebEngine.

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

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

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

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

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

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

См. также WebEngineView::LifecycleState. Эквивалент в API виджетов — QWebEnginePage::LifecycleState.

Свойства lifecycleState и recommendedState

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

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

См. также WebEngineView::lifecycleState и WebEngineView::recommendedState. Эквиваленты в API виджетов — 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. Например, вы можете ввести следующий URL-адрес в строку браузера, чтобы просмотреть исходный код HTML-страницы qt.io:

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

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

view-source:qt.io

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

WebRTC

WebRTC предоставляет браузерам возможности реального времени (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.14/qtwebengine-features.html

Spec-Zone.ru

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