изменить собственное меню в приложении electron

приложение electron открыто с тем же меню по умолчанию, которое появляется в приложении electron-quick-start example, и я не знаю, как его изменить. я также попробовал пример меню в docs но ничего не изменится. когда я скрываю меню с mainWindow.setMenu(null); меню исчезло, но я все еще не могу ввести новое меню

какие идеи?

платформа: windows 7

electron ver: 0.36.4

ref файлы:

пакета.в JSON:

{
  "name": "electric_timer",
  "version": "0.1.0",
  "description": "a Time sheet & project managment",
  "main": "app.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "none"
  },
  "author": "Eyal Ron",
  "license": "MIT"
}

app.js:

var app = require('app');
var BrowserWindow = require('browser-window');

app.on('ready', function (){
  var mainWindow = new BrowserWindow({
    width: 800,
    height: 600
  });
  mainWindow.setMenu(null);
  mainWindow.loadUrl('file://' + __dirname + '/main.html');
});

main.js:

var remote = require('remote');
var Menu = remote.require('menu');

var menu = Menu.buildFromTemplate([
  {
    label: 'Electron',
    submenu: [
      {
        label: 'Prefs',
        click: function(){
          alert('hello menu');
        }
      }
    ]
  }
]);
Menu.setApplicationMenu(menu);

main.HTML-код:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>electron test</title>
</head>
<body>
  <h1>hello world</h1>
  <script>requier('./main.js')</script>
</body>
</html>

2 ответов


электрона 'default_app' наборы меню; Если вы хотите избежать этого, Вам нужно Electron, чтобы запустить приложение непосредственно не через приложение по умолчанию (Примечание: Если вы запустите приложение с чем-то вроде electron . вы фактически запускаете приложение по умолчанию).

Электрон смотрит в свою папку ресурсов для "app", " app.asar " или "default_app", поэтому, чтобы запустить приложение напрямую, вам нужно скопировать или связать его с ресурсом Electron папка.

независимо от того, как вы запускаете приложение, вы можете настроить меню с помощью меню.setApplicationMenu -- вы можете сделать это в основном процессе, вам не нужно делать это в визуализаторе, как в вашем примере. Кстати, есть опечатка в вашем основном.html (requier вместо require), поэтому, если это ваш фактический код, он будет указывать, что ваш основной.js вообще не работает.


положить вашу логику в меню в код app ('ready') обратный вызов события. Дайте попробовать следующий пример кода

const {app, BrowserWindow, Menu} = require('electron');
let mainWindow;
let menuTemplate = [
    {
        label: "Window Manager",
        submenu: [
            { label: "create New" }
        ]
    },
    {
      label : "View",
            submenu : [
        { role : "reload" },
        { label : "custom reload" }
        ]
    }
];
function appInit () {
  // Create the browser window.
  mainWindow = new BrowserWindow({width: 800, height: 600})

  // and load the main.html of the app.
  mainWindow.loadFile('main.html')

    let menu = Menu.buildFromTemplate(menuTemplate);
    Menu.setApplicationMenu(menu);
}
app.on('ready', () => {
  appInit();
})