I am trying to make a transparent window with ElectronJs but I obtain a black background.
I am on Linux (Debian Jessie)
I have tried different versions : latest, beta and nightly with the same result.
I have a version for NW.js that works on the same machine, so I expect it is a Electron problem.
Here is my code of 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);
Here is my code of 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>
The problem is that background is not transparent but black :
Have tried different things without success (for example app.disableHardwareAcceleration()
)
Does someone knows the solution or have a full working example ?
Thx
-
Edit 1 :
Have also tried with and without --enable-transparent-visuals --disable-gpu
as said here
It's a very old regression bug in Electron project.
See https://github.com/electron/electron/issues/15947
To bypass that problem, just downgrade to 1.4.16
2.0.16
, the last working version.
EDIT 1 : if you wait at least 300ms after ready event to open windows it will work correctly
app.on('ready', () => setTimeout(onAppReady, 300));
And you do not need --disable-gpu
option in your package.json
"start": "electron --enable-transparent-visuals ."
EDIT 2 : To make it works out of the box, use this repo : 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
for me works with npm start
and npm run startWithTransparentOption
EDIT 3 : Please have a look also to @Thalinda Bandara answer below : It might be interresting (not tested but already seen it elsewhere).
I found a way to get it working! Try creating your window 10 milliseconds after Electron's ready, like this:
app.on('ready', function () {
setTimeout(function() {
createWindow();
}, 10);
});
Instead of: app.on('ready', createWindow);
I found it from this Github post: https://github.com/electron/electron/issues/2170#issuecomment-361549395
Also, you need to keep these command line flags for it to work: --enable-transparent-visuals --disable-gpu
Unfortunately Electron doesn't support transparent windows on linux.
I have actually tried a bunch of things to get it working but nothing has worked yet.
Source: https://github.com/electron/electron/issues/8532#issuecomment-306383343
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With