Electronでウィンドウメニューをカスタマイズする

2016年11月25日

動作環境

Electron: 1.3.9

 

ウィンドウのメニューをカスタムしたい

良くホームページとかには、グローバルメニューのようにページを横断して移動できるリンクがあります。
Electronで作ったアプリでもグローバルメニュー付けたいなーと思っていたのですが、
せっかくアプリを作っているのですから、HTMLで記述するのでは無く、ウィンドウメニューに付けられないかなーと思い調べてみました。

windowmenu

 

公式のドキュメントにやり方が乗ってました。

■Menu
http://electron.atom.io/docs/api/menu/

 

という訳で実装してみます。

 

導入

'use strict';

// Electronのモジュール
const electron = require("electron");

// アプリケーションをコントロールするモジュール
const app = electron.app;
const Menu = electron.Menu;

// ウィンドウを作成するモジュール
const BrowserWindow = electron.BrowserWindow;

// メインウィンドウはGCされないようにグローバル宣言
let mainWindow;

// 全てのウィンドウが閉じたら終了
app.on('window-all-closed', function() {
    if (process.platform != 'darwin') {
        app.quit();
    }
});

// Electronの初期化完了後に実行
app.on('ready', function() {
    // メイン画面の表示。ウィンドウの幅、高さを指定できる
    mainWindow = new BrowserWindow({width: 800, height: 600});
    mainWindow.loadURL('https://www.kabanoki.net/');
    // ウィンドウメニューをカスタマイズ
    initWindowMenu();

// ウィンドウが閉じられたらアプリも終了
    mainWindow.on('closed', function() {
        mainWindow = null;
    });
});


function initWindowMenu(){
    const template = [
        {
            label: 'リンク',
            submenu: [
                {
                    label: 'トップ',
                    click () { mainWindow.loadURL('https://www.kabanoki.net/'); }
                },
                {
                    label: 'Electron',
                    click () { mainWindow.loadURL('https://www.kabanoki.net/category/electron'); }
                },
                {
                    label: 'Codeingter',
                    click () { mainWindow.loadURL('https://www.kabanoki.net/category/codeingter'); }
                }
            ]
        },
        {
            label: '外部リンク',
            submenu: [
                {
                    label: 'Google',
                    click () { mainWindow.loadURL('https://www.google.co.jp/'); }
                },
                {
                    label: 'Yahoo',
                    click () { mainWindow.loadURL('http://www.yahoo.co.jp/'); }
                },
                {
                    labal: 'カバの樹',
                    click(item, window, event)
                    {
                        window.loadURL('https://www.kabanoki.net');
                    }
                }
            ]
        }
    ]

    const menu = Menu.buildFromTemplate(template)
    Menu.setApplicationMenu(menu)
}

 

これで、Electronを起動すると

 

windowmenu2

 

見事にメニューがカスタマイズできました。

今日はこの辺でー

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-Electron
-