Xóa menubar khỏi ứng dụng Electron


104

Làm cách nào để xóa thanh menu này khỏi các ứng dụng điện tử của tôi:

thanh menu

Ngoài ra, nó còn nói "Hello World" (đây có phải là do tôi đã tải xuống electron được xây dựng sẵn và sẽ biến mất sau khi tôi đóng gói ứng dụng?). Tôi không viết mã những thứ này vào html, vì vậy tôi không biết làm cách nào để lấy nó ra! -

Câu trả lời:


149

Bạn có thể sử dụng w.setMenu(null)hoặc đặt frame: false(điều này cũng loại bỏ các nút cho các tùy chọn đóng, thu nhỏ và tối đa hóa) trên cửa sổ của bạn. Xem setMenu () hoặc BrowserWindow () . Cũng kiểm tra chuỗi này


Electron hiện đã win.removeMenu()( được thêm vào v5.0.0 ), để loại bỏ các menu ứng dụng thay vì sử dụng win.setMenu(null).


Electron 7.1.x dường như có một lỗi win.removeMenu()không hoạt động. Cách giải quyết duy nhất là sử dụngMenu.setApplicationMenu(null)


4
frame: falseđã làm điều đó cho tôi.
mwilson

5
fwiw removeMenu()chỉ dành cho Linux và Windows
mùa xuân

Còn trong các cửa sổ được mở bằng window.open () trong một cửa sổ đã mở có menu thì sao?
Michael

4
Electron 7.1.1 có một vấn đề mà setMenuremoveMenukhông có tác dụng nữa liên kết
P Fuster

1
Cả giải pháp gốc hoặc giải pháp chỉnh sửa đều không hoạt động. Đây không còn là câu trả lời.
Tyguy7

63

Dùng cái này:

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

Tham khảo: https://github.com/electron/electron/issues/1415

Tôi đã thử mainWindow.setMenu(null), nhưng nó không hoạt động.


2
Tôi đã thử mainWindow.setMenu(null)với điện tử 5.0.2 và nó cũng không hoạt động với tôi. Không chắc tại sao tôi thấy lời khuyên nên sử dụng nó ở khắp mọi nơi, và đã đi lang thang nếu tôi là người duy nhất đang làm điều gì đó không đúng. Lời khuyên của bạn về việc sử dụng setMenuBarVisibility, mặc dù loại bỏ khả năng hiển thị của thanh menu, không loại bỏ nó hoàn toàn. Nó có thể được đưa trở lại bằng cách nhấn Altphím.
Artium

1
FWIW: Với Election 6.0.X không .setMenu(null)hoặc không .removeMenu()phù hợp với tôi. .setMenuBarVisibility(false)loại bỏ thanh menu và Altphím chỉ hoạt động nếu .setAutoHideMenuBar(true)được chạy.
Bob Nadler

1
+1, trong Arch Linux, setMenu(null)không hoạt động, nhưng setMenuBarVisibility(false)hoạt động như mong đợi ( không thể khôi phục thanh này bằng cách nhấn altphím như @Artium đã đề cập).
Amir A. Shabani

Đây là giải pháp đã làm việc cho tôi. Câu trả lời được đánh dấu đúng không hoạt động trên Ubuntu 18,04, Electron v6.0.9
Christoffer

Tuyệt quá! Tôi cần một cách đơn giản để bao gồm các phím tắt mà không hiển thị thanh menu. Cảm ơn rất nhiều!
Anis R.

26

Đối với Electron 7.1.1, bạn có thể sử dụng:

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

6
Cập nhật chỉnh sửa cho tôi: Menu.setApplicationMenu(null)đã hoạt động trong 7.1.2Các giải pháp khác không hoạt động với tôi!
TessavWalstijn

1
Nó cũng hoạt động trên 7.1.4. Vui lòng cập nhật câu trả lời đúng để đảm bảo mọi người gặp sự cố này sẽ có thể tìm ra giải pháp.
Emilio Numazaki

Làm việc cho tôi trong điện tử 7.1.6
Iuninefrendor

1
@OP - Chào mừng bạn đến với Stack Overflow và cảm ơn vì câu trả lời tuyệt vời! Một lưu ý - Hãy cẩn thận khi sao chép và dán dấu ngoặc kép từ các chương trình khác như MS Word. Các dấu ngoặc kép được định dạng như 'electron' không giống với các dấu ngoặc kép chưa được định dạng như 'electron' trong hầu hết các trường hợp.
sfarbota

1
Làm việc cho tôi trong electron 7.19 Điều này chắc chắn phải được cập nhật là câu trả lời chính xác
Darkrender

9

Khi bạn đóng gói ứng dụng của mình, menu mặc định sẽ không ở đó nữa, nếu điều này làm phiền bạn trong quá trình phát triển thì bạn có thể gọi setMenu(null)trên cửa sổ trình duyệt theo đề xuất của @TonyVincent.


Cảm ơn bạn đã đề cập đến việc đóng gói ứng dụng sẽ xóa menu mặc định. Tôi đã tự hỏi về điểm cụ thể đó.
raddevus

9

Kể từ 7.0.0, hầu hết các giải pháp trên không còn hoạt động. BrowserWindow.setMenu()đã được thay thế bằng Menu.setApplicationMenu(), hiện thay đổi menu trên tất cả các cửa sổ. setMenu(), removeMenu()không còn làm bất cứ điều gì, Mà bằng cách này vẫn được đề cập trong tài liệu.

setAutoHideMenuBar()vẫn hoạt động, nhưng có thể gây phiền toái nếu bạn định sử dụng Alt làm công cụ sửa đổi phím nóng. Sau khi menu hiển thị, bạn phải nhấp ra khỏi cửa sổ (tiêu điểm lỏng lẻo) để ẩn menu một lần nữa.

Nếu ứng dụng của bạn có nhiều cửa sổ, bạn không thể đặt / xóa menu riêng trên từng cửa sổ. Cách duy nhất để xóa menu là sử dụng phương pháp tiếp cận cửa sổ không khung. Điều đó xảy ra là những gì tôi muốn trong ứng dụng hiện tại của mình, nhưng không phải là một giải pháp tốt trong mọi trường hợp.


Cảm ơn bạn, đây là thứ duy nhất hoạt động kể từ phiên bản 7.0! Có bất kỳ đề cập nào về điều này trong docs / changelogs / etc không?
rvighne

Có một sự cố mở trong liên kết dự án github . Không biết liệu nó đã được lên kế hoạch ngừng sử dụng hay do lỗi.
P Fuster

9

Menu có thể được ẩn hoặc tự động ẩn (như trong Slack hoặc VS Code - bạn có thể nhấn Alt để hiển thị / ẩn menu).

Các phương pháp liên quan:

---- win.setMenu (menu) - Đặt menu làm thanh menu của cửa sổ, đặt thành null sẽ xóa thanh menu. ( Thao tác này sẽ xóa menu hoàn toàn )

mainWindow.setMenu(null)


---- win.setAutoHideMenuBar (ẩn) - Đặt xem thanh menu cửa sổ có tự động ẩn hay không. Sau khi thiết lập , thanh menu sẽ chỉ
hiển thị
khi người dùng nhấn một phím Alt .

mainWindow.setAutoHideMenuBar(true)

Nguồn: https://github.com/Automattic/simplenote-electron/issues/293

Ngoài ra còn có một phương pháp để tạo một cửa sổ không có khung như được hiển thị bên dưới:

(không có nút đóng không có gì cả. Có thể là những gì chúng tôi muốn (thiết kế tốt hơn))

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

Chỉnh sửa: (mới)

win.removeMenu() Linux Windows Xóa thanh menu của cửa sổ.

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

Đã thêm win.removeMenu () để xóa menu ứng dụng thay vì sử dụng win.setMenu (null)

Điều đó được thêm vào từ v5 như sau:

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

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

Lỗi Electron v7

Đối với Electron 7.1.1 sử dụng Menu.setApplicationMenuthay vìwin.removeMenu()

theo chủ đề này:
https://github.com/electron/electron/issues/16521

Và lưu ý lớn là: bạn phải gọi nó trước khi tạo BrowserWindow ! Hoặc nó sẽ không hoạt động!

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

Menu.setApplicationMenu(null);

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

CẬP NHẬT (Đặt autoHideMenuBar trên xây dựng BrowserWindow)

Theo bình luận của @kcpr! Chúng ta có thể đặt thuộc tính và nhiều thuộc tính trên hàm tạo

Nó có sẵn trên phiên bản electron ổn định mới nhất tính đến thời điểm hiện tại là 8.3!
Nhưng trong các phiên bản cũ, tôi đã kiểm tra v1, v2, v3, v4!
Nó có trong tất cả các phiên bản!

Theo liên kết này
https://github.com/electron/electron/blob/1-3-x/docs/api/browser-window.md

Và đối với v8.3
https://github.com/electron/electron/blob/v8.3.0/docs/api/browser-window.md#new-browserwindowoptions

Liên kết tài liệu
https://www.electronjs.org/docs/api/browser-window#new-browserwindowoptions

Từ tài liệu cho tùy chọn:

autoHideMenuBar Boolean (tùy chọn) - Tự động ẩn thanh menu trừ khi nhấn phím Alt. Mặc định là sai.

Dưới đây là một đoạn mã để minh họa nó:


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

1
setAutoHideMenuBar không được dùng nữa
Mister SirCode,

Câu trả lời bởi Edmar dưới đây là một phiên bản tốt hơn, mã mới nhất cho autoHiding menu
Mister SirCode

1
Trong Electron 8.2.5 (Tôi nghi ngờ rằng cũng trong các phiên bản trước đó) nó có thể xác định, đó là thanh menu nên được tự động ẩn trong BrowserWindowconstructor như vậy: new BrowserWindow({autoHideMenuBar: true}). Và, nhân tiện, cảm ơn Bạn vì câu trả lời này. Đối với tôi, nó có vẻ là phương pháp hoàn chỉnh nhất (giả sử rằng các phương thức vẫn tồn tại và không bị phản đối).
kcpr

@kcpr Cảm ơn bạn đã trả lời! Tôi đã cập nhật câu trả lời để phản ánh điều này!
Mohamed Allal

@MohamedAllal, tuyệt! Cảm ơn Bạn, Tôi rất vui vì Bạn coi nhận xét của tôi là hữu ích. Và cũng cảm ơn Bạn vì những nghiên cứu bổ sung mà Bạn đã thực hiện và những kết quả Bạn đã chia sẻ.
kcpr

6
@"electron": "^7.1.1" : 

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

Hoạt động như mong đợi mà không cần menu trong trình duyệt.


(electron) 'hàm setAutoHideMenuBar' không được dùng nữa và sẽ bị xóa. Vui lòng sử dụng 'thuộc tính autoHideMenuBar' để thay thế. @ "electron": "^ 7.1.1": mainWindow = new browserWindow ({height: 500, width: 800}); mainWindow.autoHideMenuBar = true;
Rachuri

3

Theo câu trả lời từ vấn đề này , bạn phải gọi Menu.setApplicationMenu(null) trước khi cửa sổ được tạo


Chào mừng bạn đến với Stack Overflow! Liên kết đến các câu trả lời khác phù hợp hơn dưới dạng nhận xét, thay vì câu trả lời. Điều này là do bạn không thực sự áp dụng câu trả lời trong câu hỏi được liên kết cho tình huống cụ thể của người dùng này.
David Chopin

2

Trước dòng này tại main.js:

mainWindow = new BrowserWindow({width: 800, height: 900})

mainWindow.setMenu(null) //this will r menu bar


0

Các giải pháp này có lỗi. Khi sử dụng các giải pháp ở bên dưới, các cửa sổ có độ trễ khi đóng.

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

Tôi đã sử dụng giải pháp ở bên dưới. Điều này là tốt hơn cho bây giờ.

const window= new BrowserWindow({...});
window.setMenuBarVisibility(false);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.