Функции Qt WebEngine
Qt WebEngine поддерживает следующие функции:
- Аудио и видео кодеки
- Инструменты разработчика Chromium
- Сертификаты клиента
- Перетаскивание
- Полный экран
- DRM HTML5
- Геолокация HTML5
- Протокол HTTP/2
- Встроенные диалоговые окна
- API плагинов Pepper
- Печать в 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 и выбрать один из предложенных сертификатов. Для приложений, которые могут переходить на небезопасные веб-сайты, рекомендуется всегда давать пользователю выбор перед однозначной идентификацией их удаленному серверу.
Пользовательские схемы
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.
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 сообщений, диалоговых окон подтверждения и запросов
- Выбор цветов
- Выбор файлов
- Отображение сообщений об ошибках валидации формы
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(). Пример см. в WebEngine Qt Quick Custom Dialogs Example.
END_OF_DOCUMENT_MARKERAPI плагинов 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. Дополнительную информацию см. в 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, обе вкладки будут иметь свои отдельные процессы ОС (поскольку явное введение URL-адреса создаёт новый экземпляр сайта). Однако, когда пользователь затем щелкает по ссылкам одного сайта для открытия дополнительных вкладок, эти новые вкладки будут использовать один и тот же процесс ОС (поскольку взаимодействие пользователя расширяет существующий экземпляр сайта).
Процесс на сайт
Страницы с разных сайтов помещаются в отдельные процессы. В отличие от модели «Процесс на экземпляр сайта», все посещения одного сайта будут использовать один процесс ОС.
Преимущества этой модели заключаются в снижении потребления памяти, поскольку больше веб-страниц будут использовать общие процессы. Недостатки включают снижение безопасности, надёжности и отзывчивости.
Для включения этой модели используйте аргумент командной строки --process-per-site. См. Использование аргументов командной строки.
Единый процесс
Только для отладки режим единого процесса может быть включен с помощью аргумента командной строки --single-process. См. Использование аргументов командной строки и Отладка и профилирование Qt WebEngine.
Проверка орфографии
Qt WebEngine поддерживает интеграцию проверки орфографии в HTML-формы для того, чтобы пользователи могли отправлять сообщения, проверенные на орфографические ошибки. Когда пользователь щелкает по подчеркнутому неверно написанному слову, контекстное меню по умолчанию отображает до четырёх предложений. Выбор одного из них заменит неверно написанное слово.
Для проверки орфографии необходимы словари. Qt поддерживает словари из проекта 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.
Эту функцию можно протестировать, открыв веб-страницу в Simple Browser или Nano Browser, а затем выбрав 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 предоставляет браузерам возможности реального времени (RTC) через простые API. Дополнительную информацию см. в WebEngineView.Feature и QWebEnginePage::Feature.
Данную функцию можно протестировать, настроив веб-камеру или микрофон, а затем открыв https://test.webrtc.org/ в Простом браузере или Браузере Nano.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qtwebengine-features.html