'use strict' import { app, protocol, BrowserWindow, Menu, globalShortcut, screen } from 'electron' import { createProtocol } from 'vue-cli-plugin-electron-builder/lib' import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer' import { updateHandle } from './update' const isDevelopment = process.env.NODE_ENV !== 'production' if (!isDevelopment) { global.__static = require("path") .join(__dirname, "/static") .replace(/\\/g, "\\\\"); } let mainWindow, loadingWindow; const loadingURL = isDevelopment //加载loading.html页面地址 ? require("path").join(__static, "loading.html") : `file://${__static}/loading.html`; const showLoading = (cb) => { loadingWindow = new BrowserWindow({ show: false, frame: false, // 无边框(窗口、工具栏等),只包含网页内容 width: 400, height: 300, resizable: false, transparent: true, // 窗口是否支持透明,如果想做高级效果最好为true }); loadingWindow.once("show", cb); loadingWindow.loadURL(loadingURL); loadingWindow.show(); }; // Scheme must be registered before the app is ready protocol.registerSchemesAsPrivileged([ { scheme: 'app', privileges: { secure: true, standard: true } } ]) async function createWindow() { const {width,height} = screen.getPrimaryDisplay().workAreaSize;//获取到屏幕的宽度和高度 console.log(width,height); // Create the browser window. const win = new BrowserWindow({ width: width, height: height, darkTheme: true, minWidth: 710, minHeight: 500, show: true, backgroundColor: '#211f1d', fullscreen: false, webPreferences: { webSecurity: false, enableRemoteModule: true, // Use pluginOptions.nodeIntegration, leave this alone // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info nodeIntegration: true, contextIsolation: false, icon: `${__static}/app.ico` } }) mainWindow = win if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode // await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL) await win.loadURL('http://localhost:8000/') if (!process.env.IS_TEST) win.webContents.openDevTools() } else { createProtocol('app') win.loadURL(process.env.VUE_APP_API_BASE_URL) win.on('ready-to-show', (event) => { setTimeout(() => { // loadingWindow.hide(); // loadingWindow.close(); win.show() }, 2000); }) } // 在开发环境和生产环境均可通过快捷键打开devTools globalShortcut.register('CommandOrControl+Shift+i', function () { win.webContents.openDevTools() }) // 设置菜单栏 Menu.setApplicationMenu(null) // 更新,第二个参数就是public里的url updateHandle(win, process.env.VUE_APP_API_BASE_URL+'electron') } const gotTheLock = app.requestSingleInstanceLock() if (!gotTheLock) { app.quit() } else { /** * 兼容https非可信域 */ app.on('certificate-error', (event, webContents, url, error, certificate, callback) => { //允许私有证书 event.preventDefault() callback(true) }); app.on('second-instance', (event) => { if (mainWindow) { if (mainWindow.isMinimized()) mainWindow.restore() mainWindow.focus() } }) // Quit when all windows are closed. app.on('window-all-closed', () => { // On macOS it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', () => { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) createWindow() }) // 禁用缓存 app.commandLine.appendSwitch("--disable-http-cache") // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.on('ready', async () => { if (isDevelopment && !process.env.IS_TEST) { // Install Vue Devtools try { await installExtension(VUEJS_DEVTOOLS) } catch (e) { console.error('Vue Devtools failed to install:', e.toString()) } } // showLoading(createWindow); createWindow() }) } // Exit cleanly on request from parent process in development mode. if (isDevelopment) { if (process.platform === 'win32') { process.on('message', (data) => { if (data === 'graceful-exit') { app.quit() } }) } else { process.on('SIGTERM', () => { app.quit() }) } }