window-setup.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { BrowserWindow, app } from 'electron';
  2. import path from 'path';
  3. import { fileURLToPath } from 'url';
  4. const __filename = fileURLToPath(import.meta.url);
  5. const __dirname = path.dirname(__filename);
  6. // 创建主窗口,根据环境加载不同内容源
  7. export function createWindow() {
  8. const isDev = process.env.NODE_ENV === 'development' || !app.isPackaged;
  9. const mainWindow = new BrowserWindow({
  10. width: 1200,
  11. height: 800,
  12. webPreferences: {
  13. preload: path.join(__dirname, '..', 'preload.cjs'),
  14. nodeIntegration: false,
  15. contextIsolation: true
  16. }
  17. });
  18. // 设置窗口事件处理(禁用关闭确认对话框等)
  19. setupWindow(mainWindow);
  20. if (isDev) {
  21. mainWindow.loadURL('http://localhost:5173');
  22. mainWindow.webContents.openDevTools();
  23. } else {
  24. mainWindow.loadFile(path.join(__dirname, '..', 'dist/index.html'));
  25. }
  26. return mainWindow;
  27. }
  28. // 设置窗口事件处理(禁用关闭确认对话框等)
  29. function setupWindow(mainWindow) {
  30. // 禁用窗口关闭确认对话框,直接关闭
  31. mainWindow.on('close', (event) => {
  32. // 不阻止关闭事件,直接关闭窗口
  33. // 如果需要清理资源,可以在这里添加
  34. });
  35. // 禁用 webContents 的 beforeunload 确认对话框
  36. mainWindow.webContents.on('will-prevent-unload', (event) => {
  37. // 不阻止卸载,直接关闭
  38. // 注意:这里不需要调用 event.preventDefault(),因为我们要允许关闭
  39. });
  40. // 禁用 beforeunload 事件(前端页面可能触发的确认对话框)
  41. mainWindow.webContents.setWindowOpenHandler(() => {
  42. return { action: 'allow' };
  43. });
  44. // 禁用所有可能阻止关闭的事件
  45. mainWindow.webContents.on('beforeunload', (event) => {
  46. // 不阻止卸载
  47. });
  48. }