Files
nl-game/electron/preload.cjs

31 lines
1.6 KiB
JavaScript
Raw Normal View History

// Electron 预加载脚本:以 contextBridge 向渲染进程暴露最小桌面端 API
// 前端凭 window.desktop 是否存在来区分「桌面端 / 浏览器」两种运行环境
const { contextBridge, ipcRenderer } = require('electron')
// 同步读取后端服务器地址:必须在页面脚本执行前就绪(axios/WS 初始化要用)
const serverBase = ipcRenderer.sendSync('nlg:get-server-base')
contextBridge.exposeInMainWorld('desktop', {
// 后端服务器地址(形如 http://127.0.0.1:8080,结尾不带斜杠)
serverBase,
// 修改服务器地址(校验通过后主进程会自动重载页面)
setServerBase: (url) => ipcRenderer.invoke('nlg:set-server-base', url),
// 检查桌面端新版本(silent=true 时已是最新版不弹窗,用于启动自动检查)
checkUpdate: (silent = false) => ipcRenderer.invoke('nlg:check-update', silent),
2026-08-18 12:29:50 +08:00
// 取消正在进行的更新下载
cancelUpdateDownload: () => ipcRenderer.invoke('nlg:cancel-update-download'),
2026-10-11 09:09:28 +08:00
// 切换屏幕模式:window 普通窗口 / windowFull 窗口全屏 / full 真全屏
setScreenMode: (mode) => ipcRenderer.invoke('nlg:set-screen-mode', mode),
// 订阅屏幕模式变化(Esc 退全屏、菜单 F11 等原生状态变化时同步),返回取消订阅函数
onScreenModeChanged: (cb) => {
const handler = (_e, mode) => cb(mode)
ipcRenderer.on('nlg:screen-mode-changed', handler)
return () => ipcRenderer.removeListener('nlg:screen-mode-changed', handler)
},
// 运行环境版本信息
versions: {
electron: process.versions.electron,
chrome: process.versions.chrome,
},
})