/** * @description: electron 封装的工具函数 * 消息整理 * tool-sphere:create 创建-悬浮球-窗口 */ import { app, shell, BrowserWindow, ipcMain } from 'electron' import { is } from '@electron-toolkit/utils' // const baseUrl = 'http://localhost:5173/#' // 开发环境使用 const baseUrl = process.env['ELECTRON_RENDERER_URL']+'/#' // 开发环境使用 // 所有窗口 let allWindow = {} // 其他已有窗口 wins export function init() { // 创建工具-悬浮球 ipcMain.on('tool-sphere:create', async(e, data) => { // console.log('测试xxxx', data) await createTools(data) // 执行逻辑 e.reply('tool-sphere:create-reply', {code: 200, msg: 'success'}) // 返回结果 }) } /** * @description: 创建工具 * @param {*} url 路由地址 * @param {number} [width=800] 窗口宽度 * @param {number} [height=600] 窗口高度 * @param {{}} [option={}] 自定义选项 * @author: zdg * @date 2021-07-05 14:07:01 */ export function createTools({url, width = 800, height = 600, option={}}) { const { mainWindow } = allWindow||{} // 获取主窗口 const devUrl = `${baseUrl}${url}` const buildUrl = `file://${__dirname}/index.html${url}` const urlAll = is.dev ? devUrl : buildUrl return new Promise((resolve) => { let win = new BrowserWindow({ width, height, type: 'toolbar', // 创建的窗口类型为工具栏窗口 frame: false, // 要创建无边框窗口 resizable: false, // 禁止窗口大小缩放 transparent: true, // 设置透明 alwaysOnTop: true, // 窗口是否总是显示在其他窗口之前 parent: mainWindow, // 父窗口 autoClose: true, // 关闭窗口后自动关闭 webPreferences: { nodeIntegration: true, // nodeApi调用 contextIsolation: false, // 沙箱取消 webSecurity: false // 跨域关闭 }, ...option }) // console.log(urlAll) // url = 'https://www.baidu.com' console.log(urlAll) win.loadURL(urlAll) win.setFullScreen(true) // 设置窗口为全屏 win.setIgnoreMouseEvents(true) // 忽略鼠标事件|使窗口不可选中 win.once('ready-to-show', () => { win.show() resolve(win) }) win.on('closed', () => { win = null }) }) } // 保存窗口 export function setWin(win = {}) { if (win && Object.keys(win).length){ Object.keys(win).forEach(key => { if (!allWindow[key]) { // 不存在就保存 allWindow[key] = win[key] } }) } }