Web App Manifest — это JSON-файл, который определяет метаданные веб-приложения, позволяя браузеру воспринимать его как нативное приложение. В контексте Mithril, который является легковесным клиентским фреймворком, использование манифеста обеспечивает корректное отображение приложения на мобильных устройствах, управляет иконками, цветовой схемой и поведением при установке на рабочий стол.
Манифест содержит набор ключей, которые описывают приложение:
name и
short_name — полное и сокращённое название
приложения. short_name используется на домашнем экране
мобильного устройства.icons — массив объектов с иконками
разного размера и формата:"icons": [
{ "src": "icon/lowres.webp", "sizes": "48x48", "type": "image/webp" },
{ "src": "icon/hd_hi.ico", "sizes": "72x72 96x96 128x128 256x256" }
]
start_url — URL, с которого начинается
приложение при запуске с домашнего экрана.display — режим отображения, например
standalone, fullscreen или
minimal-ui.background_color и
theme_color — задают цвет фона при запуске
и цвет интерфейса браузера.orientation — фиксированная ориентация
экрана (portrait или landscape).Mithril не накладывает ограничений на использование манифеста. Процесс интеграции сводится к подключению JSON-файла в HTML и корректной настройке рендеринга:
<link rel="manifest" href="/manifest.json">
Рендеринг приложения в Mithril обычно происходит в корневом элементе:
import m from "mithril";
import App from "./App.js";
m.mount(document.getElementById("root"), App);
Манифест работает независимо от структуры компонентов, но важно,
чтобы start_url совпадал с маршрутом корневого компонента,
если используется Mithril Router:
m.route(document.getElementById("root"), "/", {
"/": Home,
"/about": About
});
Иконки должны быть оптимизированы под разные разрешения экранов, особенно для мобильных устройств с высокой плотностью пикселей. В манифесте можно указать несколько размеров для одного формата, чтобы браузер автоматически выбирал подходящую версию:
{
"src": "icons/icon-192.png",
"sizes": "192x192",
"type": "image/png"
}
Для лучшей совместимости рекомендуется включать форматы PNG и WebP.
Все ресурсы должны быть доступны по URL, указанному в src,
иначе приложение не будет корректно устанавливаться на домашний
экран.
Mithril позволяет менять метаданные динамически через JavaScript.
Например, можно менять theme_color в зависимости от
состояния приложения:
function setThemeColor(color) {
let meta = document.querySelector('meta[name="theme-color"]');
if (!meta) {
meta = document.createElement('meta');
meta.name = "theme-color";
document.head.appendChild(meta);
}
meta.content = color;
}
// Пример вызова в компоненте Mithril
m.mount(document.getElementById("root"), {
view: () => {
setThemeColor("#4CAF50");
return m("div", "Приложение с динамическим цветом темы");
}
});
Этот подход полезен для адаптивных интерфейсов и поддерживает изменение темы в реальном времени.
start_url с абсолютным или относительным
путем, чтобы корректно открывалось приложение с домашнего экрана.display: standalone для создания ощущения
нативного приложения.theme_color и background_color,
чтобы убрать визуальные артефакты при запуске на мобильных
устройствах.Для проверки корректности манифеста и PWA-функциональности можно использовать:
Использование манифеста совместно с Mithril обеспечивает не только корректное отображение веб-приложения на мобильных устройствах, но и позволяет реализовать полноценный PWA-опыт с установкой на домашний экран, быстрым запуском и управлением темой интерфейса.