Electron自定义导航栏
下面是我在项目SIXiaolong1117/vue-markdown中的实现方式。
主进程:
js
const { Menu } = require('electron')
// ...
var menuTemplate = [
{
label: "文件",
submenu: [
// accelerator 配置快捷键
{
label: '新建', accelerator: "ctrl+n", click: () => {
console.log("新建文件");
mainWindow.webContents.send("newFile");
}
},
{
label: '打开', accelerator: "ctrl+o", click: () => {
console.log("打开文件");
// // 调用Vue里面的openFile
// mainWindow.webContents.send("openFile");
// Electron用dialog实现打开文件
// then 等待选择完成
const { dialog } = require('electron')
dialog.showOpenDialog({
properties: ['openFile'],
filters: [
{ name: 'Markdown Files', extensions: ['md'] },
]
}).then((data) => {
console.log(data.filePaths.toString());
mainWindow.webContents.send("openFilePath", data.filePaths.toString());
});
}
},
{
type: "separator"
},
{
label: '保存', accelerator: "ctrl+s", click: () => {
console.log("保存文件");
mainWindow.webContents.send("saveFile");
}
},
{
label: '另存为…', accelerator: "ctrl+shift+s", click: () => {
console.log("另存文件")
mainWindow.webContents.send("saveAsFile");
}
},
]
},
{
label: "编辑",
submenu: [
// role按角色进行配置
{ label: "撤销", role: "undo", click: () => { console.log("撤销操作") } },
{ label: "重做", role: "redo", click: () => { console.log("重做操作") } },
{
type: "separator"
},
{ label: "剪切", role: "cut", click: () => { console.log("剪切操作") } },
{ label: "复制", role: "copy", click: () => { console.log("复制操作") } },
{ label: "粘贴", role: "paste", click: () => { console.log("粘贴操作") } },
{
type: "separator"
},
{ label: "全选", role: "selectall", click: () => { console.log("全选操作") } },
]
},
{
label: "视图",
submenu: [
{
label: "全屏", accelerator: "f11", click: () => {
console.log("全屏");
mainWindow.setFullScreen(!mainWindow.isFullScreen());
},
},
{
type: "separator"
},
{
label: "重置页面", click: () => {
console.log("重置页面");
mainWindow.webContents.reload()
},
},
{
label: "开发者工具", accelerator: "shift+f12", click: () => {
console.log("开发者工具");
mainWindow.toggleDevTools();
}
},
]
},
{
label: "帮助",
submenu: [
{
label: "作者…", click: () => {
console.log("作者页面");
shell.openExternal('https://github.com/SIXiaolong1117');
}
},
{
label: "许可证…", click: () => {
console.log("许可证");
shell.openExternal('https://github.com/SIXiaolong1117/vue-markdown/LICENSE');
}
},
]
},
];
// 构建菜单模板
var menuBuilder = Menu.buildFromTemplate(menuTemplate);
// 设置菜单模板为当前应用的菜单
Menu.setApplicationMenu(menuBuilder);
// ...
也可以将上述内容写到单独的JS文件中,然后通过require()
引入main.js
:
js
require("../ipcMain/menu.js");