diff --git a/README.md b/README.md index e40cf2a..f36480e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## Features 📦 Out of the box -🎯 Based on [vue-ts](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-vue-ts) template, less invasive +🎯 Based on the official [vue-ts](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-vue-ts) template, less invasive 🌱 Extensible, really simple directory structure 💪 Support using Node.js API in Electron-Renderer 🔩 Support C/C++ native addons diff --git a/electron/main/index.ts b/electron/main/index.ts index 7101c53..93ea7b4 100644 --- a/electron/main/index.ts +++ b/electron/main/index.ts @@ -12,8 +12,16 @@ if (!app.requestSingleInstanceLock()) { app.quit() process.exit(0) } + process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true' +export const ROOT_PATH = { + // /dist + dist: join(__dirname, '../..'), + // /dist or /public + public: join(__dirname, app.isPackaged ? '../..' : '../../../public'), +} + let win: BrowserWindow | null = null // Here, you can also use other preload const preload = join(__dirname, '../preload/index.js') @@ -22,6 +30,7 @@ const url = `http://${process.env.VITE_DEV_SERVER_HOST}:${process.env.VITE_DEV_S async function createWindow() { win = new BrowserWindow({ title: 'Main window', + icon: join(ROOT_PATH.public, 'favicon.ico'), webPreferences: { preload, nodeIntegration: true, @@ -30,13 +39,13 @@ async function createWindow() { }) if (app.isPackaged) { - win.loadFile(join(__dirname, '../../index.html')) + win.loadFile(indexHtml) } else { win.loadURL(url) // win.webContents.openDevTools() } - // Test active push message to Renderer-process + // Test actively push message to the Electron-Renderer win.webContents.on('did-finish-load', () => { win?.webContents.send('main-process-message', new Date().toLocaleString()) }) @@ -73,7 +82,7 @@ app.on('activate', () => { }) // new window example arg: new windows url -ipcMain.handle("open-win", (event, arg) => { +ipcMain.handle('open-win', (event, arg) => { const childWindow = new BrowserWindow({ webPreferences: { preload, @@ -81,9 +90,7 @@ ipcMain.handle("open-win", (event, arg) => { }) if (app.isPackaged) { - childWindow.loadFile(join(__dirname, `../renderer/index.html`), { - hash: `${arg}`, - }) + childWindow.loadFile(indexHtml, { hash: arg }) } else { childWindow.loadURL(`${url}/#${arg}`) // childWindow.webContents.openDevTools({ mode: "undocked", activate: true }) diff --git a/electron/preload/index.ts b/electron/preload/index.ts index ea48210..0ee2dcc 100644 --- a/electron/preload/index.ts +++ b/electron/preload/index.ts @@ -1,4 +1,3 @@ - function domReady(condition: DocumentReadyState[] = ['complete', 'interactive']) { return new Promise(resolve => { if (condition.includes(document.readyState)) { @@ -84,5 +83,10 @@ function useLoading() { // ---------------------------------------------------------------------- const { appendLoading, removeLoading } = useLoading() -window.removeLoading = removeLoading domReady().then(appendLoading) + +window.onmessage = ev => { + ev.data.payload === 'removeLoading' && removeLoading() +} + +setTimeout(removeLoading, 4999) diff --git a/src/global.d.ts b/src/global.d.ts deleted file mode 100644 index 66f1d08..0000000 --- a/src/global.d.ts +++ /dev/null @@ -1,9 +0,0 @@ - - -export { } - -declare global { - interface Window { - removeLoading: () => void - } -} diff --git a/src/main.ts b/src/main.ts index 5b91e1f..730f3ac 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,9 @@ import { createApp } from 'vue' import App from './App.vue' -import './samples/node-api' +// import './samples/node-api' createApp(App) .mount('#app') - .$nextTick(window.removeLoading) + .$nextTick(() => { + postMessage({ payload: 'removeLoading' }, '*') + }) diff --git a/src/samples/node-api.ts b/src/samples/node-api.ts index 8668059..db31e5f 100644 --- a/src/samples/node-api.ts +++ b/src/samples/node-api.ts @@ -2,7 +2,6 @@ import { lstat } from 'fs/promises' import { cwd } from 'process' import { ipcRenderer } from 'electron' -// Usage of ipcRenderer.on ipcRenderer.on('main-process-message', (_event, ...args) => { console.log('[Receive Main-process message]:', ...args) })