Skip to content

CEF UI

Client script создаёт browser по packaged URL. Больший order ID отображается выше меньшего.

ts
const hud = vimp.browsers.create('package://ui/index.html')

vimp.on('ui:ready', ({ mountedAt }) => {
  console.log(`HUD mounted at ${mountedAt}`)
})

vimp.on('hud:toast', (payload) => {
  hud.executeJavaScript(
    `window.__vimpRecv?.('hud:toast', ${JSON.stringify(payload)})`,
  )
})

Внутри страницы VIMP предоставляет небольшой bridge.

ts
const unsubscribe = vimp.on('hud:toast', (payload) => {
  console.log('Toast from the client script:', payload)
})

vimp.emitClient('ui:ready', { mountedAt: Date.now() })
vimp.emitServer('garage:spawn', { model: 'adder' })

window.addEventListener('beforeunload', unsubscribe)

Маршруты сообщений

  • emitClient доставляет named event в client vimp.on.
  • emitServer отправляет network event серверу.
  • vimp.on в странице подписывается на входящие browser messages и возвращает функцию unsubscribe.

Используйте declaration merging в UI и client проектах. Server messages из CEF всё равно требуют runtime validation.

Данные для executeJavaScript сериализуйте через JSON.stringify; не вставляйте недоверенный текст в executable code. Удаляйте browser, скрывайте cursor на всех путях закрытия и не храните secrets в client assets.

VIMP developer documentation