Electron如何在mainWindow切断外部HTML时加载主菜单

时间:2016-02-17 02:56:58

标签: javascript node.js electron

在电子中我已经阅读了如何在index.html中包含菜单代码。但在我的应用程序中,我正在加载一个外部网站,并想知道如何做到这一点。

'use strict';

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

var Menu = require('menu');
var customMenu = require('./libs/custom-menu');

app.on('ready', function () {

  var mainWindow = new BrowserWindow ({
    width: 800,
    height: 600
  });

  mainWindow.loadURL('https://www.example.com');

  var template = customMenu.getTemplate();
  var menu = Menu.buildFromTemplate(template);
  Menu.setApplicationMenu(menu);
});

我无法控制mysite.net上提供的内容,因此如何在这种情况下使用正确的方式制作自定义菜单!我想我可以在app.js中做到这一点,但好奇这是否合适?

更新

如果有人好奇,这就是我如何处理它:

exports.getTemplate = function () {
  var template = [
    {
      label: 'MyApp',
      submenu: [
        {
          label: 'Sub Navigation',
          click: function () {
            console.log('test');
          }
        }
      ]
    }
  ];

  return template;
}

定制menu.js:

public class ClientVM
{
    public ClientVM()
    {
        Appts = new List<Appt>();
        Addresses = new List<Address>();
        Comments = new List<Comment>();
        Contracts = new List<Contract>();
        Depts = new List<Dept>();
        Phones = new List<Phone>();
        Addr_Types = new List<SelectListItem>();
        States = new List<SelectListItem>();
    }

    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string client_Name { get; set; }

    public bool is_active { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IList<Appt> Appts { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IList<Address> Addresses { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IList<Comment> Comments { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IList<Contract> Contracts { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IList<Dept> Depts { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IList<Phone> Phones { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IEnumerable<SelectListItem> Addr_Types { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual IEnumerable<SelectListItem> States { get; set; }

}

1 个答案:

答案 0 :(得分:1)

您只需在主进程中使用Menu模块即可。实际上,Menu无论如何都是主要过程模块的一部分,所以我认为这确实是使用它的“正确”方式。文档中的示例通过remote调用它来演示通过渲染器设置菜单的可能性;但您可以直接从主流程调用Menu.setApplicationMenu()