生成子窗口(BrowserWindow) 在设置窗口x,y坐标位置时,在多显示器分辨率不一致时,实际位置,宽度会与设定的值不一致.但是在设置窗口后约1秒左右再次设置窗口时,位置,宽度会在正确位置. 目前我判断原因是在跨屏幕后,chrome内核需要时间调整像素与dpi比例.
来自GitHub issue 同样的猜想根据
解决方案 setTimeout 延迟触发
/**
* electron 诡异bug
* 在多显示器中的副显示器
* 需要至少调用两次 setBounds 才可以正确修正位置
* 为了稳妥起见,执行10次 每次为延时0.1-1秒后执行 确保修正过来
* win 为 BrowserWindow 实例
*/
for (let i = 0; i < 10; i++) {
setTimeout(() => {
this.win.setBounds({
x: finallX,
y: parentBounds.y + Y_POSITION + 5,
width: 400,
height: 600,
})
this.win.showInactive()
this.win.focus()
}, i * 100)
}