我想为电子应用程序创建一个最受欢迎的或最近打开的文档菜单。打开这些文档后,我可以轻松地跟踪它们,但是如何动态地将它们添加到菜单中呢?
到目前为止,我学到的是:
Open …,加速器:'CmdOrCtrl+O',id:‘打开’,单击:发送},{标签:Documents …,id:'DOCUMENTS',单击:发送,子菜单:[] },{type:‘分离器’},{角色:quit,加速器:'CmdOrCtrl+Q‘} },];remote:
const electron=require(‘ipcRenderer’);const { ipcRenderer,shell,remote }=电子;const {app,BrowserWindow,对话框,菜单,MenuItem}=remote;我有一个JSON文件中的文档,但是我不知道接下来如何将它们添加到上面的Documents菜单中。
发布于 2020-02-08 14:37:12
我一直在调查这个“最近”;-)
这是一个内置的特性:壮举:最近文档菜单项#11166
{
label: 'Open Recent',
role: 'recentdocuments',
submenu: [
{
label: 'Clear Recent',
role: 'clearrecentdocuments'
}
]
},App.addRecentDocument(路径)和app.clearRecentDocuments()可以使用。电子8添加了以下特性:dontAddToRecent到Windows showOpenDialog
我已经能够让它在macOS上工作了,尽管我还没有弄清楚如何(通过electron-builder,我猜)做申请登记,这是让它在Windows上工作所必需的。
我还看到了这里下面的代码片段,但我还没有机会对其进行测试。另外,请注意,remote将在电子9:取消“远程”模块并将其移动到用户中被废弃。
function updateRecents(path, clear = false) {
const currentMenu = Menu.getApplicationMenu();
if (!currentMenu) return;
const recents = getItemByKey(currentMenu, 'recents');
if (!recents) return;
// Clear menu if requested.
if (clear) {
config.set('recentDocuments', []);
recents.submenu.clear();
recents.submenu.append(new MenuItem({ key: 'null', label: 'No Recent Documents', enabled: false }));
Menu.setApplicationMenu(currentMenu);
return;
}
const item = new MenuItem({
label: require('path').basename(path),
click: () => this.open(path)
});
// If first recent item clear empty placeholder.
if (recents.submenu.items[0].key == 'null') {
recents.submenu.clear();
recents.submenu.append(item);
}
// Limit to maximum 10 recents.
else if (recents.submenu.items.length >= 10) {
const items = recents.submenu.items;
recents.submenu.clear();
items.push(item);
items.slice(10).forEach((i) => recents.submenu.append(i));
}
// Otherwise just add item.
else recents.submenu.append(item);
// Update application menu.
Menu.setApplicationMenu(currentMenu);
}https://stackoverflow.com/questions/60125178
复制相似问题