ลบแถบเมนูจากแอพ Electron


118

ฉันจะลบแถบเมนูนี้ออกจากแอพอิเล็กตรอนของฉันได้อย่างไร:

แถบเมนู

นอกจากนี้ยังมีข้อความว่า "Hello World" (นี่เป็นเพราะฉันดาวน์โหลดอิเล็กตรอนที่สร้างไว้ล่วงหน้าและจะหายไปเมื่อฉันบรรจุแอปพลิเคชันหรือไม่) ฉันไม่ได้เขียนโค้ดเหล่านี้ลงใน html ดังนั้นฉันจึงไม่รู้ว่าจะเอาอย่างไร! -

คำตอบ:


163

คุณสามารถใช้w.setMenu(null)หรือตั้งค่าframe: false(ซึ่งจะลบปุ่มสำหรับปิดย่อและขยายตัวเลือกให้ใหญ่สุด) บนหน้าต่างของคุณ ดูsetMenu ()หรือBrowserWindow () ตรวจสอบหัวข้อนี้ด้วย


อิเลคตรอนขณะนี้ได้win.removeMenu()( เพิ่มเข้ามาใน v5.0.0 ) win.setMenu(null)เพื่อลบเมนูประยุกต์ใช้แทนการใช้


ดูเหมือนว่าอิเล็กตรอน 7.1.x จะมีข้อผิดพลาดที่win.removeMenu()ใช้งานไม่ได้ วิธีแก้ปัญหาเดียวคือการใช้Menu.setApplicationMenu(null)


4
frame: falseทำเพื่อฉัน
mwilson

5
fwiw removeMenu()เป็น Linux และ Windows เท่านั้น
ฤดูใบไม้ผลิ

แล้วใน windows ที่เปิดโดย window.open () ในหน้าต่างที่เปิดอยู่แล้วมีเมนู?
Michael

4
Electron 7.1.1 มีปัญหาที่ลิงค์setMenuและremoveMenuไม่ทำงานอีกต่อไป
P Fuster

1
ทั้งต้นฉบับหรือโซลูชันการแก้ไขไม่ทำงาน นี่ไม่ควรเป็นคำตอบอีกต่อไป
Tyguy7

71

ใช้สิ่งนี้:

mainWindow = new BrowserWindow({width: 640, height: 360})
mainWindow.setMenuBarVisibility(false)

อ้างอิง: https://github.com/electron/electron/issues/1415

ฉันพยายามmainWindow.setMenu(null)แล้วแต่มันไม่ได้ผล


2
ฉันลองmainWindow.setMenu(null)ใช้อิเล็กตรอน 5.0.2 แล้วก็ไม่ได้ผลเช่นกัน ไม่แน่ใจว่าทำไมฉันจึงเห็นคำแนะนำให้ใช้ทุกที่และหลงทางหากฉันเป็นคนเดียวที่ทำอะไรไม่ถูกต้อง คำแนะนำของคุณในการใช้setMenuBarVisibilityแม้ว่าจะลบการมองเห็นของแถบเมนู แต่ก็ไม่ได้ลบออกทั้งหมด มันสามารถนำกลับมาได้โดยการกดAltคีย์
Artium

1
FWIW: ด้วย 6.0.X เลือกตั้งค่า.setMenu(null)หรือ.removeMenu()ทำงานให้ฉัน .setMenuBarVisibility(false)ลบแถบเมนูและAltปุ่มจะใช้งานได้.setAutoHideMenuBar(true)ก็ต่อเมื่อถูกเรียกใช้
Bob Nadler

1
+1 ใน Arch Linux setMenu(null)ไม่ทำงาน แต่setMenuBarVisibility(false)ทำงานได้ตามที่คาดไว้ ( ไม่สามารถนำแถบกลับมาได้โดยการกดปุ่มaltตามที่ @Artium กล่าวถึง)
Amir A. Shabani

นี่คือวิธีแก้ปัญหาที่ได้ผลสำหรับฉัน คำตอบที่ทำเครื่องหมายว่าถูกต้องใช้ไม่ได้บน Ubuntu 18.04, Electron v6.0.9
Christoffer

เยี่ยมมาก! ฉันต้องการวิธีง่ายๆในการรวมแป้นพิมพ์ลัดโดยไม่ต้องแสดงแถบเมนู ขอบคุณมาก!
Anis R.

28

สำหรับ Electron 7.1.1 คุณสามารถใช้สิ่งนี้:

const {app, BrowserWindow, Menu} = require('electron')
Menu.setApplicationMenu(false)

6
อัปเดตแก้ไขให้ฉัน: Menu.setApplicationMenu(null)ทำงานใน7.1.2โซลูชันอื่นไม่ได้ผลสำหรับฉัน!
TessavWalstijn

1
นอกจากนี้ยังทำงานบน 7.1.4 โปรดอัปเดตคำตอบที่ถูกต้องเพื่อให้แน่ใจว่าทุกคนที่มีปัญหานี้จะสามารถเข้าถึงแนวทางแก้ไขได้
Emilio Numazaki

1
@OP - ยินดีต้อนรับสู่ Stack Overflow และขอบคุณสำหรับคำตอบที่ยอดเยี่ยม! หมายเหตุ - โปรดใช้ความระมัดระวังเมื่อคัดลอกและวางเครื่องหมายคำพูดจากโปรแกรมอื่นเช่น MS Word คำพูดที่จัดรูปแบบเช่น 'อิเล็กตรอน' ไม่เหมือนกับเครื่องหมายคำพูดที่ไม่ได้จัดรูปแบบเช่น 'อิเล็กตรอน' ในกรณีส่วนใหญ่
sfarbota

1
ได้ผลสำหรับฉันในอิเล็กตรอน 7.19 สิ่งนี้ควรได้รับการอัปเดตเป็นคำตอบที่ถูกต้อง
Darkrender

1
คำตอบนี้ใช้ได้กับฉันสำหรับ Electron v10.1.1 ขอบคุณ :)
Maninder Singh

12

เมนูสามารถซ่อนหรือซ่อนอัตโนมัติ (เช่นในSlackหรือVS Code - คุณสามารถกด Alt เพื่อแสดง / ซ่อนเมนู)

วิธีการที่เกี่ยวข้อง:

---- win.setMenu (เมนู) - ตั้งค่าเมนูเป็นแถบเมนูของหน้าต่างการตั้งค่าเป็น null จะลบแถบเมนู (การดำเนินการนี้จะลบเมนูออกโดยสิ้นเชิง )

mainWindow.setMenu(null)


---- win.setAutoHideMenuBar (hide) - ตั้งค่าว่าจะให้แถบเมนูหน้าต่างซ่อนตัวเองโดยอัตโนมัติหรือไม่ เมื่อตั้งค่าแถบเมนูจะ
แสดง
เมื่อผู้ใช้กดปุ่มเดียวปุ่ม Alt

mainWindow.setAutoHideMenuBar(true)

ที่มา: https://github.com/Automattic/simplenote-electron/issues/293

นอกจากนี้ยังมีวิธีการสร้างหน้าต่างไร้กรอบดังภาพต่อไปนี้:

(ไม่มีปุ่มปิดไม่มีอะไรสามารถเป็นสิ่งที่เราต้องการได้ (ดีไซน์ที่ดีกว่า))

const { BrowserWindow } = require('electron')
let win = new BrowserWindow({ width: 800, height: 600, frame: false })
win.show()

https://electronjs.org/docs/api/browser-window#winremovemenu-linux-windows

doc: https://electronjs.org/docs/api/frameless-window

แก้ไข: (ใหม่)

win.removeMenu() Linux Windows ลบแถบเมนูของหน้าต่าง

https://electronjs.org/docs/api/browser-window#winremovemenu-linux-windows

เพิ่ม win.removeMenu () เพื่อลบเมนูแอปพลิเคชันแทนที่จะใช้ win.setMenu (null)

ที่เพิ่มจาก v5 ตาม:

https://github.com/electron/electron/pull/16570

https://github.com/electron/electron/pull/16657

ข้อผิดพลาด Electron v7

สำหรับ Electron 7.1.1 ใช้Menu.setApplicationMenuแทนwin.removeMenu()

ตามหัวข้อนี้:
https://github.com/electron/electron/issues/16521

และหมายเหตุสำคัญคือคุณต้องเรียกมันก่อนสร้าง BrowserWindow ! หรือมันจะไม่ทำงาน!

const {app, BrowserWindow, Menu} = require('electron')

Menu.setApplicationMenu(null);

const browserWindow = new BrowserWindow({/*...*/});

UPDATE (การตั้งค่า autoHideMenuBar บน BrowserWindow construction)

ตามที่ @kcpr คอมเม้น! เราสามารถตั้งค่าคุณสมบัติและหลายอย่างบนตัวสร้าง

มีอยู่ในอิเล็กตรอนที่เสถียรล่าสุดซึ่งตอนนี้คือ 8.3!
แต่ในเวอร์ชันเก่าฉันตรวจสอบ v1, v2, v3, v4 ด้วยเช่นกัน!
มีในทุกรุ่น!

ตามลิงค์นี้
https://github.com/electron/electron/blob/1-3-x/docs/api/browser-window.md

และสำหรับ v8.3
https://github.com/electron/electron/blob/v8.3.0/docs/api/browser-window.md#new-browserwindowoptions

ลิงค์ doc
https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions

จากเอกสารสำหรับตัวเลือก:

autoHideMenuBar Boolean (ทางเลือก) - ซ่อนแถบเมนูโดยอัตโนมัติเว้นแต่จะกดปุ่ม Alt ค่าเริ่มต้นเป็นเท็จ

นี่คือตัวอย่างเพื่อแสดงให้เห็น:


let browserWindow = new BrowserWindow({
    width: 800,
    height: 600,
    autoHideMenuBar: true // <<< here
})

1
setAutoHideMenuBar เลิกใช้งานแล้ว
Mister SirCode

คำตอบโดย Edmar ด้านล่างเป็นรุ่นที่ดีกว่ารหัสล่าสุดสำหรับอัตโนมัติซ่อนเมนู
Mister SirCode

1
ใน Electron 8.2.5 (ฉันสงสัยว่ายังอยู่ในรุ่นก่อนหน้า) มันเป็นไปได้ที่จะกำหนดว่าแถบเมนูที่ควรจะเป็นอัตโนมัติที่ซ่อนอยู่ในตัวสร้างเพื่อต้องการ:BrowserWindow new BrowserWindow({autoHideMenuBar: true})และขอขอบคุณสำหรับคำตอบนี้ สำหรับฉันแล้วดูเหมือนว่าน่าจะเป็นวิธีที่สมบูรณ์ที่สุด (สมมติว่าวิธีนี้ยังคงมีอยู่และยังไม่เลิกใช้งาน)
kcpr

@kcpr ขอบคุณสำหรับคำตอบ! ฉันอัปเดตคำตอบเพื่อให้สอดคล้องกับสิ่งนี้!
Mohamed Allal

@MohamedAllal เจ๋ง! ขอบคุณฉันดีใจที่คุณเห็นว่าความคิดเห็นของฉันมีประโยชน์ และขอขอบคุณสำหรับการค้นคว้าเพิ่มเติมที่คุณทำและผลลัพธ์ที่คุณแบ่งปัน
kcpr

9

เมื่อคุณจัดแพคเกจแอปของคุณเมนูเริ่มต้นจะไม่อยู่ที่นั่นอีกต่อไปหากนี่เป็นการรบกวนคุณในระหว่างการพัฒนาคุณสามารถเรียกsetMenu(null)หน้าต่างเบราว์เซอร์ตามที่ @TonyVincent แนะนำ


ขอขอบคุณที่ระบุว่าแพ็กเกจแอปจะลบเมนูเริ่มต้น ฉันสงสัยเกี่ยวกับประเด็นเฉพาะนั้น
raddevus

9

ณ วันที่ 7.0.0 โซลูชันข้างต้นส่วนใหญ่ใช้งานไม่ได้อีกต่อไป BrowserWindow.setMenu()ถูกแทนที่ด้วยMenu.setApplicationMenu()ซึ่งตอนนี้เปลี่ยนเมนูบนหน้าต่างทั้งหมด setMenu(), removeMenu()ไม่ได้ทำอะไรซึ่งโดยวิธีการที่ยังคงมีการกล่าวถึงในเอกสาร

setAutoHideMenuBar()ยังคงใช้งานได้ แต่อาจสร้างความรำคาญหากคุณวางแผนที่จะใช้ Alt เป็นตัวปรับแต่งปุ่มลัด เมื่อเมนูปรากฏขึ้นคุณต้องคลิกออกจากหน้าต่าง (โฟกัสหลวม) เพื่อซ่อนเมนูอีกครั้ง

หากแอปพลิเคชันของคุณมีมากกว่าหนึ่งหน้าต่างคุณจะไม่สามารถตั้งค่า / ลบเมนูแยกกันในแต่ละหน้าต่างได้ วิธีเดียวในการลบเมนูคือการใช้หน้าต่างไร้กรอบ นั่นเป็นสิ่งที่ฉันต้องการในแอปพลิเคชันปัจจุบันของฉัน แต่ไม่ใช่วิธีแก้ปัญหาที่ดีในทุกกรณี


ขอบคุณนี่เป็นสิ่งเดียวที่ใช้ได้ตั้งแต่ 7.0! มีการกล่าวถึงสิ่งนี้ใน docs / changelogs / etc หรือไม่?
rvighne

มีการเปิดประเด็นในโครงการ GitHub คือการเชื่อมโยง ไม่ทราบว่ามีการวางแผนการเลิกใช้งานหรือข้อบกพร่อง
P Fuster

7
@"electron": "^7.1.1" : 

mainWindow = new browserWindow({ height: 500, width: 800});
//mainWindow.setAutoHideMenuBar(true);
mainWindow.autoHideMenuBar = true;

ทำงานตามที่คาดไว้โดยไม่มีเมนูในเบราว์เซอร์


1
(อิเล็กตรอน) 'ฟังก์ชัน setAutoHideMenuBar' เลิกใช้งานแล้วและจะถูกลบออก โปรดใช้คุณสมบัติ 'autoHideMenuBar' แทน @ "อิเล็กตรอน": "^ 7.1.1": mainWindow = new browserWindow ({height: 500, width: 800}); mainWindow.autoHideMenuBar = จริง;
Rachuri

4

หลังจากได้รับคำตอบจากปัญหานี้คุณต้องโทรMenu.setApplicationMenu(null) ก่อนที่จะสร้างหน้าต่าง


1
สวัสดียินดีต้อนรับสู่ Stack Overflow! ลิงก์ไปยังคำตอบอื่น ๆ เหมาะสำหรับแสดงความคิดเห็นมากกว่าคำตอบ เนื่องจากคุณไม่ได้ใช้คำตอบในคำถามที่เชื่อมโยงกับสถานการณ์เฉพาะของผู้ใช้รายนี้
David Chopin

4

โซลูชันเหล่านี้มีจุดบกพร่อง เมื่อใช้วิธีแก้ปัญหาที่ด้านล่างหน้าต่างมีความล่าช้าในการปิด

Menu.setApplicationMenu(null),
&&
const updateErrorWindow = new BrowserWindow({autoHideMenuBar: true});

ฉันใช้วิธีแก้ปัญหาที่ด้านล่าง ตอนนี้ดีกว่าสำหรับตอนนี้

const window= new BrowserWindow({...});
window.setMenuBarVisibility(false);



2

ตามเอกสารอย่างเป็นทางการ @ https://github.com/electron/electron/blob/v8.0.0-beta.1/docs/api/menu.mdวิธีที่เหมาะสมในการดำเนินการนี้ตั้งแต่ 7.1.2 และฉันได้ทดสอบแล้ว ในวันที่ 8.0 เช่นกันคือ:

const { app, Menu } = require('electron')

Menu.setApplicationMenu(null)

2

ตั้งค่า autoHideMenuBar เป็น true ในขณะที่สร้าง browserWindow

mainWindow = new BrowserWindow({
    autoHideMenuBar: true,
    width: 1200,
    height: 800
})

1

การอัปเดตปี 2020 สิ่งเดียวที่เหมาะกับฉัน:

Menu.setApplicationMenu(new Menu());

นี่เป็นคำตอบเดียวที่ใช้ได้ ณ วันที่ 2 ธันวาคม 2020
Vishal

0

setMenu(null);เป็นคำตอบที่ดีที่สุด autohidemenuจะแสดงเมื่อเริ่มต้นแอปพลิเคชัน


    function createWindow(){
        const win = new BrowserWindow({
            width: 1500,
            height: 800,
            webPreferences:{
                nodeIntergration: true
            }
        });
        win.setMenu(null);
    win.loadFile("index.html");
    }
    app.whenReady().then(createWindow);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.