3c2b68bbc3
- Add --unsafely-treat-insecure-origin-as-secure flag for dev/uat URLs - Set auto-granted permission handlers for mic/camera in main process - Adapt useVoiceRoom error message for Electron (no Chrome flags hint) - Add debug logging to voice-token service and frontend voice API Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
73 lines
1.9 KiB
JavaScript
73 lines
1.9 KiB
JavaScript
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()
|
|
})
|