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 в clientvimp.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.