gpt4 book ai didi

menu - Electron :如何从渲染过程中填充菜单?

转载 作者:行者123 更新时间:2023-12-03 12:41:41 25 4
gpt4 key购买 nike

我想为 Electron 应用程序创建一个收藏夹或最近打开的文档菜单。打开这些文档后,我可以轻松对其进行跟踪,但是如何动态地将它们添加到菜单中呢?

到目前为止,我学到了什么:

  • 在主过程中创建一个菜单:
    menu=[
    {
    label: 'Some Application',
    submenu: [
    { label: `Open …`, accelerator: 'CmdOrCtrl+O', id:'OPEN', click: send },
    { label: `Documents …`, id:'DOCUMENTS', click: send, submenu: [] },
    { type:'separator' },
    { role: `quit`, accelerator: 'CmdOrCtrl+Q' }
    ]
    },
    ];
  • 在渲染过程中使用remote:
    const electron=require('electron');
    const { ipcRenderer, shell, remote } = electron;
    const {app,BrowserWindow,dialog,Menu,MenuItem}=remote;

  • 我将文档保存在JSON文件中,但是我不知道下一步该怎么做才能将其添加到上面的 Documents菜单中。

    最佳答案

    我一直在“最近” ;-)。

    它是一个内置功能:feat: Recent documents menu item #11166

     {
    label: 'Open Recent',
    role: 'recentdocuments',
    submenu: [
    {
    label: 'Clear Recent',
    role: 'clearrecentdocuments'
    }
    ]
    },

    并且可以使用 app.addRecentDocument(path)app.clearRecentDocuments()。 Electron 8添加了此功能: dontAddToRecent to Windows showOpenDialog

    我已经能够在 macOS上运行它,尽管我还不能弄清楚如何使 Application Registration起作用(我想通过 electron-builder),这是使其在 Windows上运行所必需的。

    我还从 here看到了下面的代码片段,但是我还没有机会对其进行测试。另外,请注意, Electron 9将弃用 remote: Deprecate the 'remote' module and move it to userland
    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);
    }

    关于menu - Electron :如何从渲染过程中填充菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60125178/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com