编辑:
看起来这个问题和我做Windows的顺序有关。我以前做过以下事情:
app.whenReady().then(() => {
createWindow();
spawnLoadingBlockWindow();
spawnGeneratingBlockWindow();
// iOS specific check. Honestly makes no sense that
// I have this here as this program doesn't support
// iOS anyway.
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
})
});
字符串
但是在切换两个弹出窗口的产生顺序之后,问题消失了。我仍然不知道为什么这会有所不同-有人知道吗?
原文:
我正在制作一个电子应用程序,目前正在制作一个弹出窗口,上面写着“正在加载...”。这个窗口被设置为默认不显示,然后我调用一个函数,当我想要的时候它会移动并显示。
我的问题是,似乎是随机的,这个弹出窗口是全黑的:
Image of the black popup
这并不总是发生,而是在应用程序的整个生命周期中保持一致;因此,如果我关闭并重新启动它,有时它会正常工作(但大多数情况下不会)。
弹出窗口是这样的:
async function spawnLoadingBlockWindow() {
loadingWin = new BrowserWindow({
width: 250,
height: 75,
center: true,
frame: false,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
},
parent: mainWindow,
modal: true,
show: false
});
loadingWin.loadFile('loadingPopup.html');
}
型
我使用下面的函数来显示它:
function showPopup(popupWin) {
const winPosition = mainWindow.getPosition();
const winSize = mainWindow.getSize();
popupWin.setPosition(winPosition[0] + Math.round(winSize[0] / 2) - Math.round(popupWin.getSize()[0] / 2), winPosition[1] + Math.round(winSize[1] / 2) - Math.round(popupWin.getSize()[1] / 2));
popupWin.show();
}
型
我试过使用.reload()
重新加载BrowserWindow,这没有什么区别。我还测试了show
被设置为true,在这种情况下,窗口不是黑色的(但我不能真的这样使用它,因为它必须隐藏起来,直到我调用上面的函数)。如果有任何帮助的话,这就是我调用showPopup
函数的确切上下文:
async function saveBlockInTemp(event, block) {
clearTemp();
showPopup(loadingWin);
await sleep(100);
decompressTexturesAndMoveToTemp(block);
decompressRecipePreviewAndMoveToTemp(block);
loadingWin.hide();
temp = block;
return true;
}
型
这里我使用了一个休眠函数,它只需要等待100 ms,因为接下来的两个解压缩函数多次调用execSync
,导致程序等待。如果没有100 ms的睡眠,弹出窗口永远不会正确加载,只是显示一个透明背景的轮廓。我有另一个弹出,这样做,以及,但没有问题,关于完全黑色。
1条答案
按热度按时间vjhs03f71#
作为一种变通方法,尝试启动电子应用程序与硬件加速关闭,这确实为我工作,以摆脱黑色弹出窗口对某些机器的问题。
在主进程代码的开头添加以下内容:
字符串