Устанавливайте веб-приложения с новым HTML-элементом install¶
Для установки веб-приложений всегда требовался JavaScript. Когда вы используете событие beforeinstallprompt, весь процесс установки живет в скрипте. Новый элемент <install> меняет это: добавьте на страницу один HTML-элемент, и браузер сам отрисует надежную кнопку установки без JavaScript.
Команда Microsoft Edge совместно с командой Chrome реализовала элемент <install> в Chromium. Теперь его можно тестировать за флагом в Chrome или Edge начиная с версии 148, а также в рамках origin trial, который доступен в обоих браузерах с версии 148 по 153.
Попробуйте его и посмотрите, как он отличается от императивного Web Install API (navigator.install()), у которого есть собственный origin trial.
Проблема¶
Установка веб-приложений фрагментирована. У каждого браузера есть свой набор точек входа, например иконки в адресной строке, пункты меню и подсказки. У разработчиков мало контроля над тем, когда и как пользователю показывается процесс установки.
Создать опыт, похожий на магазин приложений, где пользователи могут устанавливать другие приложения с вашего сайта, сложнее: исторически установка была ограничена текущей страницей.
Элемент <install>¶
Содержимым и отображением нового HTML-элемента <install> управляет браузер. Как и в случае с другими элементами разрешений, например <geolocation>, контроль браузера над текстом кнопки, языком и внешним видом означает, что он может считать клик пользователя настоящим сигналом намерения.
Пользователь, который нажимает кнопку с текстом «Установить Wonderful Application», вряд ли удивится появлению диалога установки.
Поскольку кнопку отрисовывает браузер, вы получаете надежный элемент установки с минимальным количеством кода и без необходимости организовывать ритуал beforeinstallprompt в JavaScript.
Установка текущего приложения¶
Если текущая страница ссылается на манифест, в котором есть поле id, вам достаточно одного элемента:
Браузер отрисует кнопку со стандартизированным текстом и иконкой, а когда пользователь нажмет ее, запустится обычный браузерный процесс установки.
Установка другого приложения¶
Чтобы установить веб-приложение с другого origin, используйте атрибут installurl, который указывает на это приложение:
Если страница по адресу https://awesome-app.com ссылается на манифест, в котором задано поле id, больше ничего делать не нужно.
Если поля id нет, используйте атрибут manifestid, чтобы передать вычисленный id манифеста:
Чтобы получить вычисленный id манифеста:
- Откройте DevTools.
- Перейдите на вкладку Application.
- В разделе Identity скопируйте значение Computed App ID.
Используя кнопку <install> для установки приложений с других origin, вы можете создать страницу-каталог, где пользователи смогут устанавливать несколько приложений, каждое со своей кнопкой <install>.
Добавьте fallback-содержимое¶
Если браузер не поддерживает элемент <install>, будет показан HTML, который вы поместили внутрь элемента:
Определение поддержки¶
Если fallback-содержимого недостаточно для вашего сценария и вы хотите реализовать другой пользовательский опыт в браузерах без поддержки <install>, определите поддержку через JavaScript:
Обработка событий¶
Элемент <install> отправляет события, по которым можно отслеживать успешную установку, отклонение диалога и ошибки валидации:
Попробуйте уже сейчас¶
Чтобы попробовать элемент <install> уже сейчас, есть два варианта:
- Протестировать элемент локально только на своем устройстве.
- Протестировать элемент в реальных условиях с вашими пользователями, зарегистрировавшись в origin trial.
Локальное тестирование¶
Чтобы протестировать элемент на своем устройстве:
- Используйте Chrome или Edge версии 148 или новее.
- Откройте
about://flags/#web-app-install-elementв новой вкладке. - Установите Web App Install Element в значение Enabled.
- Перезапустите браузер.
Тестирование на рабочем сайте через origin trial¶
Origin trial позволяет реальным пользователям на вашем production-сайте использовать функцию без предварительного включения флага.
- Откройте страницу регистрации origin trial для элемента
<install>. - Войдите в аккаунт.
- Нажмите Register.
- Укажите origin вашего сайта и заполните остальную часть формы.
- После отправки формы вы получите строку токена.
- Добавьте токен на страницы сайта с помощью тега
<meta>:
Также можно отправлять токен в HTTP-заголовке ответа:
Origin trial доступен в Chrome и Edge с версии 148 по 153, и один и тот же токен будет работать в обоих браузерах. Подробнее об origin trials:
- Get started with origin trials для Chrome.
- Test experimental APIs and features by using origin trials для Edge.
Посмотрите в действии¶
Посмотрите демо <install> Element Store: это каталог PWA, который использует элемент <install> для установки нескольких демонстрационных приложений.
Сравнение с Web Install API¶
Элемент <install> — не единственный экспериментальный подход к улучшению установки приложений в вебе.
Ранее мы экспериментировали с Web Install API (navigator.install()) — императивным JavaScript API, который также позволяет сайту запускать установку веб-приложений с того же или другого origin. Подробнее см. в статье The Web Install API is ready for testing.
У Web Install API тоже есть собственный origin trial.
Вот как сравниваются два подхода:
| элемент | API navigator.install() | |
|---|---|---|
| Подход | Декларативный HTML | Императивный JavaScript |
| Необходимый код | Один HTML-элемент | JavaScript для вызова navigator.install() и обработки возвращенного promise |
| Доверие браузера | Высокое: браузер контролирует содержимое и внешний вид кнопки, как у элементов разрешений | Низкое: требуется активация пользователем (клик, касание) как сигнал доверия |
| Установка с другого origin | Да, через installurl | Да, если передать URL в navigator.install() |
| Кастомизация | Минимальная: браузер сам решает, как выглядит кнопка | Полная: вы проектируете собственный UI и вызываете API из любого взаимодействия |
| Fallback | Встроенный: дочернее содержимое отображается, если элемент не поддерживается | Вы сами пишете определение поддержки и fallback-логику |
| Лучше всего подходит для | Готовых кнопок установки с минимумом кода; сценариев, где желателен UI, которому доверяет браузер | Кастомных процессов установки, динамических UI каталогов, интеграции в существующие интерфейсы с большим количеством JavaScript |
Расскажите, что думаете¶
Мы активно собираем обратную связь по обоим подходам. В зависимости от ваших потребностей мы можем добавить поддержку элемента <install>, API navigator.install() или обоих вариантов.
Чтобы поделиться отзывом об элементе <install>, создайте issue в репозитории WICG, посвященном этому предложению.
Чтобы поделиться отзывом об API navigator.install(), добавьте комментарий в issue Developer Feedback: navigator.install versus <install> element.
