const { app, BrowserWindow, session } = require('electron') const path = require('path') const ENV_URLS = { dev: 'http://192.168.1.14:7033', uat: 'http://nas.wjl-work.top:7034', } function getWindowUrl() { const envArg = process.argv.find(a => a.startsWith('--env=')) if (envArg) { const env = envArg.split('=')[1] return ENV_URLS[env] || ENV_URLS.dev } return ENV_URLS.dev } // 在 Chromium 启动前将 HTTP 内网地址标记为安全源, // 否则 navigator.mediaDevices 在 HTTP 非 localhost 下会被置空 const insecureOrigins = Object.values(ENV_URLS).join(',') app.commandLine.appendSwitch('unsafely-treat-insecure-origin-as-secure', insecureOrigins) function createWindow() { const win = new BrowserWindow({ width: 1280, height: 800, minWidth: 960, minHeight: 600, title: 'Game Group', autoHideMenuBar: true, webPreferences: { preload: path.join(__dirname, 'preload.js'), contextIsolation: true, webSecurity: false, allowRunningInsecureContent: true, }, }) const url = getWindowUrl() win.loadURL(url) // 页面标题同步 win.on('page-title-updated', (event, title) => { event.preventDefault() win.setTitle(`Game Group - ${title}`) }) } app.whenReady().then(() => { // 自动批准麦克风/摄像头权限请求,无需用户手动确认 session.defaultSession.setPermissionRequestHandler((_webContents, permission, callback) => { if (permission === 'media' || permission === 'microphone' || permission === 'camera') { callback(true) } else { callback(false) } }) // 绕过权限检查,确保 mediaDevices 可用 session.defaultSession.setPermissionCheckHandler((_webContents, permission) => { if (permission === 'media' || permission === 'microphone' || permission === 'camera') { return true } return false }) createWindow() }) app.on('window-all-closed', () => { app.quit() })