代码之家  ›  专栏  ›  技术社区  ›  Manngo

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

  •  0
  • Manngo  · 技术社区  · 5 年前

    我学到的是:

    • 在主进程中创建菜单:

      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

    0 回复  |  直到 5 年前
        1
  •  0
  •   spring    5 年前

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

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

    app.addRecentDocument(path) app.clearRecentDocuments() dontAddToRecent to Windows showOpenDialog

    我已经把它修好了 macOS 虽然我还没弄明白怎么做 Application Registration electron-builder ,我想)这是需要得到它的工作 Windows .

    here 但我还没有机会测试它。另外,要注意 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);
    }