跨屏子窗口(BrowserWindow)位置bug解决方案

303 阅读1分钟

生成子窗口(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,
			width400,
			height600,
		})
		this.win.showInactive()
		this.win.focus()
	}, i * 100)
}