Использование прозрачного аргумента и установка его в значение true при создании нового BrowserWindow в Electron обычно дает окну прозрачный фон... Но в Linux, насколько мне известно, это не так.
Теперь я слышал, что вы можете установить некоторые аргументы командной строки... Но это не работает... Он просто отображает черный или белый цвет, несмотря ни на что...
// Should set the commandLine arguments and work...
const {app} = require('electron')
app.commandLine.appendSwitch('enable-transparent-visuals');
app.commandLine.appendSwitch('disable-gpu');
Теперь я слышал, что это не проблема с электроном, а проблема с оборудованием ... Но мне просто нужно было убедиться, поэтому я создал этот вопрос!
Я сделал, и это не работает...
попробуйте установить атрибут rgba тега body rgba(255,255,255,0.5). Это будет работать?
Нам поможет, если вы сможете описать вашу машину и ОС.
Может быть, вы также можете поделиться своим источником в репо?
Это также не работает извне, используя командную строку teransset linux. Подозреваю что-то присущее Chromium, но моих знаний об архитектуре Electron недостаточно.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Кажется, что есть несколько проблем с прозрачностью в разных дистрибутивах с разным оборудованием. Существуют различные предлагаемые обходные пути. Возможно, вы не сможете заставить прозрачность работать приемлемо для вашего сценария на оборудовании и дистрибутивах все.
Примеры
Из документов Электрона:
On Linux, users have to put --enable-transparent-visuals --disable-gpu in the command line to disable GPU and allow ARGB to make transparent window, this is caused by an upstream bug that alpha channel doesn't work on some NVidia drivers on Linux.
https://github.com/electron/electron/blob/master/docs/api/frameless-window.md
Вопрос о командной строке, которую я уже добавил с помощью: app.commandLine.appendSwitch('enable-transparent-visuals'); app.commandLine.appendSwitch('disable-gpu');
Привет, я думаю, что обращался к этой части вашего вопроса: «Но мне просто нужно было убедиться, поэтому я создал этот вопрос!» в основном, похоже, есть несколько проблем, и это может быть связано с вашим дистрибутивом / оборудованием. В ссылках упоминаются некоторые интересные обходные пути - например. чтобы отложить отображение окна на несколько секунд после того, как оно «готово».
Просто чтобы прояснить это, пока ничего не сработало, и я предполагаю, что ничего не сработает ... Хотя я готов к любому, у кого есть представление о том, как решить мою проблему, и попробовать указанное исправление.
Возможно, попробуйте предложение задержки от doom в его ответе, также может быть полезно упомянуть где-нибудь информацию о вашей видеокарте и дистрибутиве Linux.
Прости! Ошибки восходящего потока в Chrome = одна из наименее интересных частей работы с Electron, но если вы зарегистрируете проблему в нужном месте, она может быть отсортирована.
Куда бы вы порекомендовали мне обратиться и сообщить об этом?
Я бы начал с самих Electron здесь: github.com/электрон/электрон/вопросы или подумал о добавлении к проблеме Doom здесь, если у вас такой же дистрибутив: github.com/электрон/электрон/проблемы/15947.
@GrahamMc ошибка восходящего потока в Chromium была исправлена 2 года назад (если вы говорите об этом bugs.chromium.org/p/chromium/issues/detail?id=369209)
Я столкнулся с той же проблемой, что и вы, поэтому я написал:
Пока запрошенная функция не реализована, решение простое, просто добавьте задержку перед запуском окна.
Можно клонировать это репозиторий git, поставить задержку на 500 и нормально магия появится.
РЕДАКТИРОВАТЬ 1: Используйте это репо: https://gitlab.com/doom-fr/electron-transparency-demo
git clone https://gitlab.com/doom-fr/electron-transparency-demo
cd electron-transparency-demo
npm install
npm start
# or npm run startWithTransparentOption
# or npm run startWithAllOptions
У меня работает из коробки с Debian Jessie и electronic 4.0.5, для npm start, npm run startWithTransparentOption но не с npm run startWithAllOptions.
NB: будьте осторожны, чтобы установить не менее 500 мс, чтобы он работал. После можно уменьшить задержку, но она не стабильна. Вот почему необходимо событие для TransparentReady.
Рок
@OneGuy Я обновил репо, попробуйте. Если не работает, попробуйте команду npm run
Окей круто. Для статистики, можете ли вы сказать нам свою ОС, и работает ли она также с npm run startWithTransparentOption и npm run startWithAllOptions
И если вы можете использовать этот запрос функции: github.com/электрон/электрон/проблемы/16809, это тоже будет круто. Рок.
В настоящее время я использую Xubuntu, но на своем домашнем компьютере я установил несколько дистрибутивов, и они тоже не работали ... Дистрибутивы Ubuntu, Manjaro, Arch и Kubuntu, похоже, не работали до этого исправления, и мне не нужно тестировать это еще ... У меня есть больше дистрибутивов, но это были те, на которых я тестировал это .... И для команд запуска npm я просто получаю ошибку отсутствующего сценария, не знаю почему ...
осторожность: задержка может зависеть от аппаратного обеспечения - быстрый процессор, не требуется большая задержка и т. д.
Этот код может сработать для вас. Я добавляю объяснение в комментарии.
//electron can't be transparent on linux
//see issue on github: https://github.com/electron/electron/issues/2170
// app.disableHardwareAcceleration(); //use this
//or use these two lines code
app.commandLine.appendSwitch('enable-transparent-visuals');
app.commandLine.appendSwitch('disable-gpu');
//createWindow need to wait(more than about 100ms) if you want the window to be transparent
// app.whenReady().then(createWindow); //this won't work
app.commandLine.appendSwitch('enable-transparent-visuals');
app.commandLine.appendSwitch('disable-gpu');
app.on('ready', () => {
setTimeout(() => {
createWindow();
}, 200);
});
Это сработало для меня:
if (process.platform === "linux") {
app.commandLine.appendSwitch('enable-transparent-visuals');
app.disableHardwareAcceleration();
app.on('ready', () => setTimeout(createWindow, 400));
}
Вы можете взглянуть на это: ourcodeworld.com/articles/read/315/…