Electron笔记

147 阅读1分钟

保存代码自动刷新

安装electron-reloader。

npm install --save-dev electron-reloader

在main.js(Electron项目入口文件)文件中增加如下代码,引入electron-reloader。

const { app, BrowserWindow } = require('electron')

// 热加载
try {
  require('electron-reloader')(module,{});
} catch (_) {}

菜单定制

定制应用菜单,应用菜单只能在 Electron 的主进程中进行访问。例如:

// main.js
const { app, Menu } = require('electron');

app.on('ready', () => {
    const appMenu = Menu.buildFromTemplate(menuTemplate);
    Menu.setApplicationMenu(appMenu);
});

应用菜单通过 Menu.setApplicationMenu 进行设置。

菜单模板:

菜单的 template 是一个对象数组,每个对象会定义一个独立的菜单,它会显示在应用菜单的 Bar 位置,显示的文字通过 label 属性进行定义。

以这段代码为例,我们定义了两个菜单,每个菜单都包含两个菜单项,菜单项就是我们点击菜单时下拉出来的内容。

// 1.导入 electron 中的 Menu
const { Menu, BrowserWindow } = require('electron')

// 2.创建菜单模板,数组里的每一个对象都是一个菜单
const template = [
  {
    label: '菜单一',
    // submenu 代表下一级菜单
    submenu: [
      {
        label: '子菜单一',
        // 添加点击事件
        click: () => {
          // 创建一个新的窗口
          let sonWin = new BrowserWindow({
            width: 200,
            height: 200,
          })
          sonWin.loadFile('./index2.html')
          // 为关闭的时候进行清空
          sonWin.on('close', () => {
            sonWin = null
          })
        },
      },
      { label: '子菜单二' },
      { label: '子菜单三' },
      { label: '子菜单四' },
    ],
  },
  {
    label: '菜单二',
    // submenu 代表下一级菜单
    submenu: [
      { label: '子菜单一' },
      { label: '子菜单二' },
      { label: '子菜单三' },
      { label: '子菜单四' },
    ],
  },
]

// 3.从模板中创建菜单
const myMenu = Menu.buildFromTemplate(template)

// 4.设置为应用程序菜单
Menu.setApplicationMenu(myMenu)
  

参考:学透 Electron 自定义菜单 - 掘金 (juejin.cn)

进程间通信

主线程 到 渲染线程 通过 webContents.send 来发送 --->ipcRenderer.on 来监听

渲染线程 到 主线程 需要通过 ipcRenderer.send发送 ---> ipcMain.on来监听