执行.show()后Electron BrowserWindow变黑

r55awzrz  于 2023-08-01  发布在  Electron
关注(0)|答案(1)|浏览(190)

编辑:

看起来这个问题和我做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的睡眠,弹出窗口永远不会正确加载,只是显示一个透明背景的轮廓。我有另一个弹出,这样做,以及,但没有问题,关于完全黑色。

vjhs03f7

vjhs03f71#

作为一种变通方法,尝试启动电子应用程序与硬件加速关闭,这确实为我工作,以摆脱黑色弹出窗口对某些机器的问题。
在主进程代码的开头添加以下内容:

app.disableHardwareAcceleration()

字符串

相关问题