Files
Scoreboard/console/renderer/preload.js
T

30 lines
1.4 KiB
JavaScript

'use strict'
const { contextBridge, ipcRenderer } = require('electron')
// 渲染层是纯静态页面,能力全部经这里白名单暴露,不开 nodeIntegration
const subscribe = (channel, callback) => {
const handler = (_event, payload) => callback(payload)
ipcRenderer.on(channel, handler)
return () => ipcRenderer.removeListener(channel, handler)
}
contextBridge.exposeInMainWorld('consoleApi', {
getStatus: () => ipcRenderer.invoke('service:get-status'),
startService: () => ipcRenderer.invoke('service:start'),
stopService: () => ipcRenderer.invoke('service:stop'),
restartService: () => ipcRenderer.invoke('service:restart'),
getLog: () => ipcRenderer.invoke('log:tail'),
clearLog: () => ipcRenderer.invoke('log:clear'),
relayoutDisplays: () => ipcRenderer.invoke('display:relayout'),
openExternal: (url) => ipcRenderer.invoke('app:open-external', url),
openServerAdmin: () => ipcRenderer.invoke('app:open-server-admin'),
minimize: () => ipcRenderer.invoke('window:minimize'),
maximize: () => ipcRenderer.invoke('window:maximize'),
close: () => ipcRenderer.invoke('window:close'),
isMaximized: () => ipcRenderer.invoke('window:is-maximized'),
onMaximizeChange: (callback) => subscribe('window:maximize-changed', callback),
onLog: (callback) => subscribe('log:line', callback),
onStatus: (callback) => subscribe('service:status', callback)
})