桌面端|Electron 三个异常处理修复方式

刚好项目中踩过一些坑,这些坑吧,修复方式都不是很优雅,原因是官方提供的 API 存在奇奇怪怪的 Bug。按 Electron 他们自己的说法,他们是小团队,支撑不了 issues 的修复,很多问题放着放着自动就关掉了手动狗头。这里记录一下,方便大家做一个参考。

异常一:setAutoResize 不正常

现象

这刚好是桌面端|Electron BrowserView 多容器管理(内附 Demo)这篇文章的一位读者发现的,在存在原生标题栏的 Mac 设备上,如果改变窗口大小,会出现标签栏被遮挡的情况:

我在mac上调试的时候,双击控制栏全屏后网页页面会遮挡住标签栏,不知道是为什么?再恢复原来大小后也仍然会遮挡住。

原因

原因就是BrowserView的setAutoResize方法发生异常了,在触发 autoResize 时,忽略了标题栏高度,导致整体 top 上移了一个标题栏高度。

解决方式

不使用setAutoResize,改为手动处理resize后的大小变化:

监听窗口的resize事件,然后重新设置:

后话

这个在笔者公司项目里确实没有问题,因为项目都是用的自定义标题栏,默认都是置顶开始布局,所以天然上就没遇到 ...

异常二:模态窗口大小异常

现象

这是一个也是在 Mac 上遇到的问题,使用官方提供的模态窗口来实现弹出窗口时,发现内容区会被顶上去一块:

原因

在隐藏导航栏的情况下,内容区还是会把导航栏高度计算进去(32px),多减了 32px,导致实际窗口大小偏小了,就离了谱,一会计算进去,一会又不计算 ...

解决方式

在loadURL后重新设置内容区的宽高:

为了控制问题边界,特地判断了 Mac 设备,但在 Mac 设备上,会出现加载时会出现一个小一点的窗口,然后加载完成后平滑过渡成一个大一点窗口的体验。

异常三:自启动因网络时机导致的异常处理

自启动,笔者看来是个反人类的设计,反正笔者不喜欢任何软件在重启后自动开启手动狗头。

以前没注意,其实自启动会有挺多的问题,其中有一点就是软件自启动时,网络还没连接成功,这其实也很常见的。但在 Mac 上尤其严重,基本网络还没连,应用已经启动好了。

如果没做全局的网络监听,来做联网后重新发各种请求,那自启动后就会有各种问题。

解决方案

详见这篇文章:「桌面端」Electron 实时网络环境监控,不要用 Electron 官方推荐的纯前端判断的方式,具体原因文章也有写,不再复述了。

除了统一的网络环境监控,还要控制各个地方的网络请求收口,具体来说还是很麻烦的。

那大厂是怎么做的?

其实细心的看钉钉或者微信就发现,重启后其实都需要重新登录,看似为了账号安全的合理,但其实我觉得也有如果离线可用的话,初始化过程变得很难控制这点考虑。


感谢阅读,如果对你有用请点个赞 ❤️

相关推荐
凤城老人10 小时前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
Helix2502 天前
Electron、WebView 框架与 HTA 对比:桌面应用选型、安全性与现代替代方案
前端·javascript·electron·webview·vbscript·hta·本地html应用
不可能片场2 天前
AI视频首尾帧控制 用参考图定住镜头
前端·electron
GuoguoDad~3 天前
用 WorkBuddy 写了个 ImageKit 上传工具
electron·reactjs
凤城老人3 天前
从PyQt6到Electron:一款英语字帖生成器的跨平台重构实战与踩坑全记录
javascript·重构·electron
不可能片场5 天前
Electron 发布标题的冒号 击穿命令行解析
前端·electron
500845 天前
React Native for OpenHarmony 实战:三方库 react-native-crypto-js 的鸿蒙化适配指南
javascript·react native·性能优化·electron·harmonyos
星辰徐哥5 天前
鸿蒙平台 KDevelop 集成开发环境适配实战:基于 Electron 壳方案的跨平台多语言代码编辑器开发
electron·编辑器·harmonyos
fellow996 天前
鸿蒙真机调试三板斧:Playwright 为什么驱动不了 Electron-on-鸿蒙
华为·electron·harmonyos
web打印社区7 天前
远程打印:WebSocket 与 HTTP 轮询怎么选
前端·vue.js·websocket·网络协议·http·electron·pdf