Electron 在 windows 平台下的 bug 报告

Electron 在 windows 平台下 setSize/setBounds 导致窗口抖动的问题
问题描述
近期在使用 Electron
开发桌面应用时,尝试实现窗口的收缩与展开功能。但是在使用 setSize
或 setBounds
方法时,发现窗口在展开或是收起时,总是会发生位置偏移、大小抖动的问题。经过一番查找,发现这个问题在 windows
平台下是一个已知的 bug
。不过,#10862
这个 issue
中主要说明的情况是,getPosition
获取的窗口位置和实际位置不一致,但底层涉及到的问题应该是一致的。
electron issue: Per monitor DPI awareness causes issues with window positioning and sizing #10862
复现环境
- 操作系统:
Windows 11
Electron
版本: 36.2.1Node.js
版本: 22.10.0npm
版本: 11.0.0
这里列出项目的 package.json
作为参考:
1 | { |
复现步骤
基于最小可复现的原则,以下是复现步骤:
- 创建一个简单的
Electron
应用。 - 在主进程中调用
BrowserWindow
的setSize
或setBounds
方法多次调整窗口大小。
1 | app.whenReady().then(() => { |
- 观察窗口在调整过程中出现抖动或位置偏移的现象。
预期行为
窗口应该保持左上角位置固定,向右下方延展大小。
实际行为
窗口在调整过程中会出现明显的抖动,多次触发大小变化,能十分明显的察觉到窗口偏离原本的位置。
当使用扩展屏时,主屏缩放倍率为150%,副屏缩放倍率为100%。测试发现,窗口在两个屏幕上都会出现抖动现象。
当不连接副屏时,主屏幕缩放倍率为150%,窗口在主屏幕上也会出现抖动现象。
可能原因分析
DPI
缩放或多显示器环境下的坐标计算误差。Chromium
内核本身存在的一个bug
。
窗口最大化导致材质和圆角不一致的问题
问题描述
此外,在 electron
使用过程,也发现了如下问题:electron
设置的无框浏览器窗口在最大化时,会由于最大化的方式不同,导致窗口的材质和圆角出现不一致的问题。这个问题已经被完整的描述在 #46753
中,所以这里就不再赘述了。
electron issue: Windows 11: Material (Acrylic/Mica) and Rounded Corners Inconsistencies in Frameless BrowserWindow Maximize/Restore Actions #46753
- Title: Electron 在 windows 平台下的 bug 报告
- Author: tada-zako
- Created at : 2025-05-19 13:12:22
- Updated at : 2025-05-19 05:20:47
- Link: https://tada-zako.top/2025/技术/electron-windows-setsize-bug/
- License: This work is licensed under CC BY-NC-SA 4.0.