[Electron] Приложения поверх всех окон — даже в полноэкранном режиме или на других рабочих столах.
Перевод и адаптация заметки [Electron] Keep apps on top, whether in full-screen mode or on other desktops. Мне она очень помогла в свое время.

Я пишу приложение на Electron.
Вот что оно должно делать:
- приложение должно быть видно при переключении рабочих столов (Desktop)
- отображается поверх других приложений
- оставаться поверх даже при отображении других приложений в полноэкранном режиме
- оставаться поверх, когда Keynote находится в режиме презентации
Особенно сложно добиться отображения поверх, когда Keynote в режиме презентации. Это заметка - окончательное решение этой проблемы.

Я добавил эту настройку при открытии окон в main.js
, который указан в поле main файла package.json
.
1const { app, BrowserWindow } = require("electron");
2const path = require('path');
3
4const is_mac = process.platform==='darwin'
5
6if(is_mac) {
7 app.dock.hide() // - 1 -
8}
9
10const MAIN_WINDOWS_WIDTH = 300;
11const MAIN_WINDOWS_HEIGHT = 350;
12
13function createClapWindow() {
14 // Create the browser window.
15 const mainWindow = new BrowserWindow({
16 width: MAIN_WINDOWS_WIDTH,
17 height: MAIN_WINDOWS_HEIGHT,
18 webPreferences: {
19 preload: path.join(__dirname, 'preload.js'),
20 }
21 })
22
23 mainWindow.setAlwaysOnTop(true, "screen-saver") // - 2 -
24 mainWindow.setVisibleOnAllWorkspaces(true) // - 3 -
25 mainWindow.loadFile('public/reaction.html')
26}
27
28app.whenReady().then(() => {
29 createClapWindow()
30})
1. app.dock.hide()
Эта настройка позволяет macOS отображать окно поверх полноэкранного режима. Поскольку в Windows такой настройки нет, я предварительно проверяю, что это именно macOS. Настройка применяется только для macOS.
2. mainWindow.setAlwaysOnTop(true, "screen-saver")
Эта настройка позволяет отображать окно поверх, когда Keynote находится в режиме презентации.
В BrowserWindow
есть параметр alwaysOnTop
. Когда я устанавливал его в true
, окно отображалось поверх других приложений, но не поверх режима презентации Keynote.
Поэтому мне пришлось использовать следующую настройку: mainWindow.setAlwaysOnTop(true, "screen-saver").
3. mainWindow.setVisibleOnAllWorkspaces(true)
Эта настройка позволяет отображать окно при переключении на другие рабочие столы (workspaces).
Справочные ссылки
P.S.
Благодяря этой заметке мне удалось написать эту программу: https://github.com/Hydrock/TransLatte