electron windows 无边框窗口最大化时的隐藏边框问题

最近在做 pc 小黑盒 开发时碰到一个最大化窗口与实际内容不匹配的问题 ,electron 应用在开启最大化时,实际窗口内容会变小,导致边缘 ui 被隐藏

比如目前是非全屏下的 ui 展示

可以看到底部按钮 fixed 在 底部,下面有个 12px 的 padding

但是当点击 右上角的 矩形 去窗口最大化时,会发现底部的 padding 被挤出去了

这里画一个框架图,其实小黑盒 pc 的窗口就是一个 mainWindow + 多个 webview 的形式

其中,mainWindow 有个 sidebar 可以控制里面的 webview 的切换展示,所以我们只需要看 mainWindow 的宽高就可以,mainWindow 的宽高就代表着实际展示区域,最大化时为 2196px X 1188px

我们来看下实际上 electron 在 new WebContentsView 时如何设置的区域范围

设置区域范围通过 setBounds 实现的,那么我们看下 getWebViewBounds 是如何设置宽高的

可以看到,这里的宽高表示的就是 webview 的区域范围,刚刚我们看到的实际内容区域应该是 mainWindowBounds 的宽高

因此,我们直接把 mainWindowBounds 的宽高在最大化时 log 出来进行比较即可

你会发现为何 electron 以为的宽高是 2209px X 1201px,而实际上宽高范围确实 2196px X 1188px,宽高均少了 14px 左右,和 ui 上少掉的 12px 也差不多刚好对应上了,这是为啥

起初以为是自己在 new BrowserWindow 时没有添加 frame: false 的配置项,这样就会有个窗口边框的影响?其实不是的,就算真这样,那么小窗肯定也会有影响

实际上这种最大化时实际区域变小的行为是 windows 在窗口最大化时故意保留不可见的 调整边框,这可以允许用户通过拖拽一个看不到的边框来调整窗口大小

如何解决这个问题

很简答,electron 的 screen 模块刚好有个检测实际工作区域范围的 api

screen.getPrimaryDisplay()

因此我们可以判断最大化时调用这个 api 去 setBounds

相关推荐
2603_965896621 分钟前
CSS BEM 命名规范|组件化样式分层权威指南
前端·javascript·css
进击的明明2 分钟前
前端开发中的 BEM 国际命名规范:让 CSS 不再"打架"
前端·css·html
deli0076 分钟前
中文在网址里为什么变成 E4B8AD?URL 编码 22 组用例实测
前端
羲云11 分钟前
MOSS-Image 开源后爆火:5B 生图模型真正值得关注的,是可控排版
前端
BreezeJiang20 分钟前
闭包和 useState 是两个知识点?你可能只学了半条作用域链
前端·面试
2601_9583529031 分钟前
一款模块通吃15类语音产品?AN-93如何实现录音笔、门禁、IPC的快速适配
前端·人工智能·嵌入式硬件·回声消除·降噪处理
子兮曰33 分钟前
Bun v1.4.4 实测:2,025 个文件,bun fmt 2.6 秒跑完
前端·后端·bun
Liudef0633 分钟前
用 DeepSeek Search API 做一个干净的单文件搜索页面(附完整源码)
前端·人工智能·工具·搜索·deepseek
忆挽篱笙歌1 小时前
进程替换函数与shenll命令行解释器
前端·javascript·算法
计算机魔术师1 小时前
砸了2200亿美元还是不够用,AWS说2027年也卖完了
前端