main.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { app, BrowserWindow, session } from 'electron';
  2. import { fileURLToPath } from 'url';
  3. import path from 'path';
  4. const __filename = fileURLToPath(import.meta.url);
  5. const __dirname = path.dirname(__filename);
  6. const isDev = process.env.NODE_ENV === 'development' || !app.isPackaged;
  7. // Set Content Security Policy
  8. function setContentSecurityPolicy() {
  9. session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
  10. const csp = isDev
  11. ? "default-src 'self'; script-src 'self' 'unsafe-inline' http://localhost:*; style-src 'self' 'unsafe-inline'; connect-src 'self' http://localhost:* ws://localhost:*; img-src 'self' data: https: blob:; font-src 'self' data:; worker-src 'self' blob:;"
  12. : "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' data: https:; font-src 'self' data:;";
  13. const responseHeaders = Object.assign({}, details.responseHeaders);
  14. responseHeaders['Content-Security-Policy'] = [csp];
  15. callback({ responseHeaders });
  16. });
  17. }
  18. function createWindow() {
  19. const mainWindow = new BrowserWindow({
  20. width: 1200,
  21. height: 800,
  22. webPreferences: {
  23. preload: path.join(__dirname, 'preload.cjs'),
  24. nodeIntegration: false,
  25. contextIsolation: true
  26. }
  27. });
  28. if (isDev) {
  29. mainWindow.loadURL('http://localhost:5173');
  30. mainWindow.webContents.openDevTools();
  31. } else {
  32. mainWindow.loadFile(path.join(__dirname, 'dist/index.html'));
  33. }
  34. }
  35. app.whenReady().then(() => {
  36. setContentSecurityPolicy();
  37. createWindow();
  38. app.on('activate', () => {
  39. if (BrowserWindow.getAllWindows().length === 0) {
  40. createWindow();
  41. }
  42. });
  43. });
  44. app.on('window-all-closed', () => {
  45. if (process.platform !== 'darwin') {
  46. app.quit();
  47. }
  48. });