Skip to content

WebView

Client JavaScript предоставляет varion.WebView через platform bootstrap. WebView-команды передаются в client runtime и дальше в WebEngine overlay.

Конструктор

javascript
// Базовый overlay (второй аргумент true = overlay-режим)
const view = new varion.WebView(url, true);

// Fullscreen overlay
const view = new varion.WebView(varion.assetUrl('ui-pack', 'index.html'), true);
view.pos  = { x: 0, y: 0 };   // левый верхний угол (нормализованные 0–1)
view.size = { x: 1, y: 1 };   // 1×1 = полный экран
view.visible = true;
view.focused = true;

view.emit('hud:setHealth', 200);
view.on('hud:ready', () => varion.log('ui ready'));

Второй аргумент конструктора — булев флаг overlay. Если true, WebView рендерится поверх игры. Если пропущен или false — режим DUI (in-world texture), который сейчас является scaffold и деградирует до screen billboard (см. ниже). Конструктор также принимает new varion.WebView(url, pos, size).

Координаты pos и size нормализованы: {x: 0, y: 0} — левый верхний угол, {x: 1, y: 1} — правый нижний. По умолчанию размер 0.15 × 0.1 — для fullscreen задавайте size = {x: 1, y: 1} явно.

Factory

javascript
const overlay = varion.WebView.create({
  url: varion.assetUrl('ui-pack', 'index.html'),
  overlay: true,
  pos: { x: 0, y: 0 },
  size: { x: 1, y: 1 },
  visible: true,
  headers: { 'X-Auth': token },
});

WebView.create(options) — рекомендуемый способ. Передача drawable / targetTexture в options переводит view в DUI-режим (билборд-fallback).

Статические члены

APIНазначение
WebView.create(options)Создать WebView из options-объекта
WebView.allМассив всех WebView
WebView.countКоличество WebView
WebView.getByID(id)Найти WebView по id
WebView.gpuAccelerationActiveGPU-ускорение активно (true)

Глобальные хелперы событий: varion.onWebView(name, cb), varion.onceWebView(name, cb), varion.offWebView(name, cb).

Методы экземпляра

МетодНазначение
on(name, cb)Подписаться на событие из WebView (возвращает { destroy() })
once(name, cb)Подписаться на одно событие
off(name, cb)Удалить обработчик
emit(name, ...args)Отправить событие в WebView
emitRaw(name, ...args)То же, что emit
getEventListeners(name)Список обработчиков (или всех, если name не задан)
execJS(code)Выполнить JavaScript внутри WebView
reload(ignoreCache)Перезагрузить страницу
focus() / unfocus()Сфокусировать / снять фокус
sendKey(key, state)Отправить нажатие клавиши (state — down/up)
attachTo(target, offset)Привязать к сущности (world billboard)
detach()Отвязать от сущности
addOutput(output)Добавить audio-output (напр. AudioOutputWorld)
removeOutput(output)Убрать audio-output
getOutputs()Список привязанных audio-outputs
setExtraHeader(name, value)Дополнительный HTTP-заголовок
setZoomLevel(level)Уровень масштабирования
setCookie(cookie)Установить cookie (строка или объект)
openDevTools()Открыть DevTools
destroy()Уничтожить WebView

Плюс мета-хелперы: getMeta(key), hasMeta(key), setMeta(key, value), deleteMeta(key).

Свойства (get/set)

СвойствоНазначение
urlURL страницы (переустановка перезагружает видимый view)
unfocusedUrlURL, на который переключиться при потере фокуса
pos = {x, y}Позиция левого верхнего угла (нормализованные 0–1)
size = {x, y}Размер (нормализованные 0–1, 1×1 = fullscreen)
zZ-порядок (наложение)
opacityПрозрачность 0–1
visible / isVisibleПоказать или скрыть WebView
focusedФокус WebView (синхронизирует game controls)

Только для чтения (состояние)

ГеттерНазначение
isReadyСтраница загружена и готова
isLoadedСтраница загружена
isLoadingИдёт загрузка (видим и ещё не загружен)
isStreamedInView застримлен (для world-attach — по сущности)
isFocusedВ фокусе
isDuiCompatРаботает в DUI-совместимом (billboard) режиме
worldOnScreenWorld-view сейчас на экране
validView ещё существует (не уничтожен)

События

javascript
view.on('load', () => {});            // страница загрузилась (isReady/isLoaded = true)
view.on('loadError', () => {});       // ошибка загрузки
view.on('customEvent', (a, b) => {}); // любое событие, отправленное со страницы

Со стороны страницы события отправляются в client через bridge WebEngine, а view.emit(...) / view.execJS(...) доставляют данные обратно на страницу.

Поведение visible и focused

Установка visible = true автоматически фокусирует WebView. Когда WebView focused и visible, syncWebViewGameControls отключает управление игрой.

DUI / in-world

In-world texture (DUI) — это scaffold. Non-overlay режим и attachTo(entity) деградируют до screen billboard, спроецированного на сущность, а не до реальной in-world текстуры. Отдельный класс-заготовка varion.WebViewDui(url, width, height) существует как каркас будущей in-world текстуры:

javascript
const dui = new varion.WebViewDui(url, 512, 512);
dui.emit('event', payload);
dui.isReady;   // true, когда текстура готова (пока scaffold)
dui.destroy();

Загрузка URL

javascript
const url = varion.httpUrl('cef/index.html');            // HTTP-сервер ресурса
const url = varion.assetUrl('mymode', 'ui/index.html');  // asset-pack ресурса

http/https-URL должны совпадать с manifest-http или asset-pack ресурса; локальные схемы (file/data/blob, относительные пути) разрешены.

Source backing

Страница основана на sdk/client-js-runtime/injected/platform-bootstrap.js, client/src/scripting/CClientScriptRuntime.cpp, client/src/webengine/CWebEngineOverlay.cpp и client/src/webengine/CWebEngineOverlay.h.

Varion Multiplayer Platform