2 функции · окно рабочего стола + узел app · MIT

Справочник функций webview

Расширение окна рабочего стола (16-е): на стороне скрипта только две функции-проба; жизненным циклом окна владеет сервисный узел class: "app" — загрузочный сплэш при старте, авто-открытие при готовности сервиса, корректная остановка при закрытии. Без среды автоматически headless.

Пробы доступности (2 функции)

xsWebviewAvailable проба

Поддерживает ли текущая среда окна webview (Windows: установлен WebView2 Runtime). Скрипты используют для решения о включении десктопного поведения.

bool xsWebviewAvailable(void);

xsWebviewVersion версия

Строка версии бэкенда (заимствованная; NULL при недоступности).

const char* xsWebviewVersion(void);

Сервисный узел app

Узел "class": "app" в xs.json = локальный HTTP-сервис + окно webview рабочего стола:

  • Запуск: загрузочный сплэш; главное окно открывается автоматически при готовности сервиса
  • Остановка: закрытие окна запускает корректную остановку (пять фаз, эквивалент Ctrl+C); при window.close: "hide" окно лишь скрывается — повторный запуск будит существующее окно через обнаружение единственного экземпляра
  • Запасной режим: без WebView2 Runtime автоматически headless
  • С односоставной публикацией: после xs pack продукт = десктоп-exe в один клик

Матрица деградации по платформам и вариантам

вариант сборкиплатформаWebView2поведение
расширение webviewWindowsRuntime установленполная функциональность: окно загрузки, автовыход по готовности, семантика close
расширение webviewWindowsRuntime отсутствуетпо install_fallback: ask спрашивает / silent ставит молча / headless сразу деградирует; любая неудача установки — headless
расширение webviewLinux— (оконного бэкенда нет)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.

Ноль DLL времени выполнения: WebView2Loader.dll находится в каталоге установленного Runtime. Прирост бинарника ~296 КБ.