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