You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Electron应用添加类似原生顶部栏的底部状态栏?

Electron 原生底部状态栏实现疑问

已实现的顶部应用栏代码

我已通过Electron的Menu API实现了正常工作的顶部应用栏,代码如下:

_setupMenu() {
        const template = [
            {
                label: 'File',
                submenu: [
                    { role: 'quit' }
                ]
            },
            {
                label: 'View',
                submenu: [
                    { role: 'reload' },
                    { role: 'toggleDevTools' },
                    { type: 'separator' },
                    { role: 'resetZoom' },
                    { role: 'zoomIn' },
                    { role: 'zoomOut' },
                    { type: 'separator' },
                    { role: 'togglefullscreen' }
                ]
            }
        ];

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

需求与问题

我想添加一个类似顶部栏的原生风格底部状态栏,用来放置各类操作元素和状态信息。但目前找到的方案都是基于HTML/CSS注入实现的,并非Electron原生方案。

我试过以下HTML/CSS注入的方式,但不符合预期,而且代码实现、参数配置和顶部应用栏差异很大:

_injectStatusBarStyles() {
        const css = `
            .status-bar {
                position: fixed;
                bottom: 0;
                left: 0;
                right: 0;
                height: 25px;
                background-color: #e8e8e8;
                border-top: 1px solid #c1c1c1;
                display: flex;
                align-items: center;
                padding: 0 10px;
                font-family: system-ui;
                -webkit-app-region: no-drag;
                z-index: 1000;
            }
            .status-bar-item {
                margin-right: 15px;
                cursor: pointer;
                color: #2c2c2c;
                display: flex;
                align-items: center;
            }
            .status-bar-item:hover {
                background-color: #d0d0d0;
                border-radius: 3px;
                padding: 2px 4px;
            }
        `;
        this.mainWindow.webContents.insertCSS(css).then(r => console.log('CSS injected:', r));
    }

    _injectStatusBarHTML() {
        const js = `
            const statusBar = document.createElement('div');
            statusBar.className = 'status-bar';
            
            const folderIcon = document.createElement('div');
            folderIcon.className = 'status-bar-item';
            folderIcon.innerHTML = '📁';
            folderIcon.onclick = () => {
                window.electron.openUserDataPath();
            };
            
            statusBar.appendChild(folderIcon);
            document.body.appendChild(statusBar);
        `;
        this.mainWindow.webContents.executeJavaScript(js).then(r => console.log('JS injected:', r));
    }

尝试的原生方案疑问

我尝试用第二个Menu模板来实现底部状态栏,但不确定能不能把这个Menu显示在应用底部,也不知道具体实现方法:

_createStatusBar() {
        const statusTemplate = [
            {
                label: '📁',
                click: () => {
                    // Handle folder click
                    console.log('Folder clicked');
                }
            },
            {
                label: 'Status: Ready',
                enabled: false
            },
            {
                label: '🔄',
                click: () => {
                    // Handle refresh click
                    console.log('Refresh clicked');
                }
            }
        ];
        const statusMenu = Menu.buildFromTemplate(statusTemplate);
        Menu.setApplicationMenu(statusMenu);
        
    }

内容的提问来源于stack exchange,提问作者Francisco IA Lover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:52:42