main.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // main.js (ESM 版本)
  2. import { app, BrowserWindow, Menu, ipcMain } from 'electron';
  3. import { fileURLToPath } from 'url';
  4. import { dirname, join } from 'path';
  5. import { writeLog } from './src/log/log-writer.js';
  6. // -------------- 构造 ESM 版 __dirname --------------
  7. const __filename = fileURLToPath(import.meta.url);
  8. const __dirname = dirname(__filename);
  9. // -------------- 创建窗口 --------------
  10. function createWindow() {
  11. const isMac = process.platform === 'darwin';
  12. const win = new BrowserWindow({
  13. show: false,
  14. frame: !isMac,
  15. titleBarStyle: isMac ? 'hiddenInset' : 'default',
  16. webPreferences: {
  17. nodeIntegration: true,
  18. contextIsolation: false,
  19. },
  20. });
  21. // 去掉应用菜单栏
  22. Menu.setApplicationMenu(null);
  23. if (!isMac) win.removeMenu();
  24. win.maximize();
  25. // 加载外置 H5 页面
  26. win.loadFile(join(process.cwd(), 'h5/index.html'));
  27. win.once('ready-to-show', () => win.show());
  28. //渲染进程死了,纪录日志
  29. win.webContents.on('render-process-gone', (event, details) => {
  30. writeLog('error',`渲染进程崩溃 ${details}`);
  31. // writeLog('error', JSON.stringify(details));
  32. });
  33. }
  34. // -------------- 应用生命周期 --------------
  35. app.whenReady().then(createWindow);
  36. app.on('window-all-closed', () => {
  37. if (process.platform !== 'darwin') app.quit();
  38. });
  39. app.on('activate', () => {
  40. if (BrowserWindow.getAllWindows().length === 0) createWindow();
  41. });
  42. // -------------- IPC --------------
  43. ipcMain.handle('write-log', async (_, level, msg) => {
  44. writeLog(level, msg);
  45. });