Не удается создать прозрачное окно в Electron (JavaScript) - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать прозрачное окно с ElectronJs, но получаю черный фон.

Я работаю в Linux (Debian Jessie)

Я пробовал разные версии: последняя, ​​бета икаждую ночь с тем же результатом.

У меня есть версия для NW.js, которая работает на той же машине, поэтому я ожидаю, что это проблема с электронами.

Вот мой код main.js:

const {app, BrowserWindow} = require('electron');
let mainWindow;
function createWindow () {
  mainWindow = new BrowserWindow({width: 920, height: 300,  frame:true, transparent:true, backgroundColor: '#00FFFFFF'});
  mainWindow.loadFile('index.html');
  mainWindow.on('closed', function () {
    mainWindow = null;
  });
}
app.on('ready', createWindow);

Вот мой код index.html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body style="background-color:rgba(255,255,255,0); color:lightgrey;">
    <h1>Hello World!</h1>
    <!-- All of the Node.js APIs are available in this renderer process. -->
    We are using Node.js <script>document.write(process.versions.node)</script>,
    Chromium <script>document.write(process.versions.chrome)</script>,
    and Electron <script>document.write(process.versions.electron)</script>.

    <script>
      // You can also require other files to run in this process
      // require('./renderer.js')
    </script>
  </body>
</html>

Проблема в том, что фон не прозрачный, а черный:

enter image description here

Безуспешно пробовали разные вещи (например, app.disableHardwareAcceleration())

Кто-нибудь знает решение или имеет полный рабочий пример?

Thx

-

Редактировать 1: также пробовал с и без --enable-transparent-visuals --disable-gpu, как сказано здесь

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Это очень старая ошибка регрессии в проекте Electron.

См. https://github.com/electron/electron/issues/15947

Чтобы обойти эту проблему, просто уменьшите ее до 1.4.16 2.0.16,последняя рабочая версия.


РЕДАКТИРОВАТЬ 1: если вы ждете не менее 300 мс после события готовности, чтобы открыть окна, он будет работать правильно

app.on('ready', () => setTimeout(onAppReady, 300));

И вам не нужно --disable-gpuопция в вашем package.json

"start": "electron --enable-transparent-visuals ."

РЕДАКТИРОВАТЬ 2: Чтобы сделать это из коробки, используйте этот репозиторий: 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

для меня работает сnpm start и npm run startWithTransparentOption

0 голосов
/ 29 ноября 2018

Я нашел способ заставить его работать!Попробуйте создать ваше окно через 10 миллисекунд после того, как Электрон будет готов, например:

app.on('ready', function () {
    setTimeout(function() {
        createWindow();
    }, 10);
});

Вместо: app.on('ready', createWindow);

Я нашел его в этом сообщении на Github: https://github.com/electron/electron/issues/2170#issuecomment-361549395

Кроме того, вам нужно сохранить эти флаги командной строки, чтобы он работал: --enable-transparent-visuals --disable-gpu


К сожалению, Electron не поддерживает прозрачные окна в Linux.

У меня естьна самом деле пробовал кучу вещей, чтобы заставить его работать, но пока ничего не получалось.

Источник: https://github.com/electron/electron/issues/8532#issuecomment-306383343

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...