Пробы доступности (2 функции)
xsWebviewAvailable проба
Поддерживает ли текущая среда окна webview (Windows: установлен WebView2 Runtime). Скрипты используют для решения о включении десктопного поведения.
xsWebviewVersion версия
Строка версии бэкенда (заимствованная; NULL при недоступности).
Сервисный узел app
Узел "class": "app" в xs.json = локальный HTTP-сервис + окно webview рабочего стола:
- Запуск: загрузочный сплэш; главное окно открывается автоматически при готовности сервиса
- Остановка: закрытие окна запускает корректную остановку (пять фаз, эквивалент Ctrl+C); при
window.close: "hide"окно лишь скрывается — повторный запуск будит существующее окно через обнаружение единственного экземпляра - Запасной режим: без WebView2 Runtime автоматически headless
- С односоставной публикацией: после xs pack продукт = десктоп-exe в один клик
Матрица деградации по платформам и вариантам
| вариант сборки | платформа | WebView2 | поведение |
|---|---|---|---|
| расширение webview | Windows | Runtime установлен | полная функциональность: окно загрузки, автовыход по готовности, семантика close |
| расширение webview | Windows | Runtime отсутствует | по install_fallback: ask спрашивает / silent ставит молча / headless сразу деградирует; любая неудача установки — headless |
| расширение webview | Linux | — (оконного бэкенда нет) | headless: сервис работает как обычно, лог печатает [xs] app 'main': open http://127.0.0.1:<port>/ in a browser |
| без расширения | любая | — | то же headless плюс строка webview extension not built in, window ignored; конфигурация class: "app" разбирается всегда (одна xs.json на все варианты) |
Фронт всегда best-effort: любой сбой потока окна (ошибка создания, отсутствие Runtime, отказ пользователя от установки, исключение в UI-потоке) деградирует в строку лога и никогда не уводит сборку двигателя и цепочку остановки на путь fail — окно это слой отображения, сервис — суть. Рендерер WebView2 — отдельный процесс, падение страницы не заражает xs.
Постатейные ограничения девяти полей дескриптора window (title / width / height / min_width / min_height / url / devtools / close / install_fallback) — в справочнике полей xs.json · узел app; там же семантика автоназначения и прилипания port: 0.