Can';在Electron(javascript)中无法成功创建透明窗口

Can';在Electron(javascript)中无法成功创建透明窗口,electron,Electron,我试图用电子枪制作一个透明的窗口,但我得到了一个黑色的背景 我在Linux上(Debian Jessie) 我尝试过不同的版本:最新版本、测试版和夜间版本,结果都是一样的 我有一个在同一台机器上运行的NW.js版本,所以我认为这是一个电子问题 这是我的main.js代码: const {app, BrowserWindow} = require('electron'); let mainWindow; function createWindow () { mainWindow = new B

我试图用电子枪制作一个透明的窗口,但我得到了一个黑色的背景

我在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>

你好,世界!
你好,世界!
我们正在使用Node.js document.write(process.versions.Node),
chrome文件。编写(过程。版本。chrome),
和Electron document.write(process.versions.Electron)。
//您还可以要求在此过程中运行其他文件
//需要(“./renderer.js”)
问题是背景不是透明的,而是黑色的:

尝试过不同的事情但没有成功(例如
app.disableHardwareAcceleration()

是否有人知道解决方案或有完整的工作示例?

Thx

-

编辑1: 也尝试过使用和不使用
——启用透明视觉效果——禁用gpu

正如我所说的,我找到了一个让它工作的方法!尝试在Electron就绪10毫秒后创建窗口,如下所示:

app.on('ready', function () {
    setTimeout(function() {
        createWindow();
    }, 10);
});
而不是:
app.on('ready',createWindow)

我在Github的帖子中找到了它:

此外,您还需要保留这些命令行标志以使其正常工作:
——启用透明视觉效果——禁用gpu


不幸的是,Electron不支持linux上的透明窗口

事实上,我已经尝试了很多方法来让它工作,但都没有效果


来源:

这是Electron项目中一个非常古老的回归错误

要绕过这个问题,只需降级到最后一个工作版本
1.4.16
2.0.16


编辑1:如果您在就绪事件后至少等待300毫秒以打开窗口,它将正常工作

app.on('ready', () => setTimeout(onAppReady, 300));
而且您不需要在package.json中禁用gpu
选项

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

编辑2: 要使其开箱即用,请使用此回购:

对于我来说,可以使用透明选项
npm start
npm run startWithTransparentOption


编辑3: 请同时查看:
它可能正在进行交互测试(未测试,但已在其他地方看到)。

如果任何人在新版本中出现此错误,您已经禁用或取消了开发人员工具,则您将能够成功使用透明窗口

win.webContents.openDevTools({mode:'undocked'})

浏览器窗口{transparent:true}在不打开devTools即不添加


YourNewBrowserWindow.WebContent.openDevTools()
到main.js(或electron.js)脚本

据说它可以工作(有一些限制,但它应该可以工作)@doom嗨,对不起,我以为这不可能,但我又挖了一点,原来是这样的!请看我编辑过的答案。这是个好主意,但行不通。仍然有黑色背景。@doom它有错误消息还是只是黑色的?还要确保您仍然有这些命令行标志
--启用透明视觉效果--禁用gpu
。据说,
——启用透明视觉效果——禁用gpu
仅适用于某些Nvidia图形卡,因此正常情况下,它不需要在您的机器上工作。在1.4.16中,它似乎工作得很好。我想我们必须等待我的问题。
win.webContents.openDevTools({mode:'undocked'})