win环境,electron如何解决由resizable:false引发的高度变化bug
发布于 作者:苏南大叔 来源:程序如此灵动~本文中描述的是electron
在win
下面的一个现存bug
,electron
官方宣布说已经fix
。但是,在苏南大叔的测试下,截至到发稿,最新版的4.05
和3.14
都仍然存在着本文所描述的问题。所以,严重怀疑electron
官方解决bug
的诚意。
本文测试环境:win10
,electron@3.14
。
高度不断减小的bug
本文中的bug
发生,是有特定环境的。win10
环境,设置了resizable
为false
,并且存在顶部菜单的情况下,就会触发本文描述的bug
。bug
的现象是:最小化窗体后,再点击出来后,高度就会减小十几像素,而且会不断减小。每restore
一次,窗体高度就减小一次...
注:从最小化或者最大化还原为正常窗体的事件,英文名为restore
。
触发条件再次总结:
win
环境resizable:false
- 存在系统菜单(默认情况下都有顶部系统菜单的,比如
debug
环境下)
经过测试,这个变化的高度,很有可能是顶部菜单的高度。并且,bug
触发的前提是禁止窗体调整大小。关于这个问题,相关的issue
地址如下:
issue
虽然已经被标记为fix
,但是在苏南大叔的测试中,此bug
仍然可以在最新版的electron
中复现...从官方的态度上来看,可以看到似乎是很不在意这事啊....
临时解决方案
本方案也是苏南大叔独家推出的,如果您觉得好用,那么请打赏点赞转发,谢谢。
因为组合的重要因素就是resizable:false
和applicationMenu
。代码监控点,苏南大叔选择的是:on('restore')
。
思路如下:如果是win
系统/resizable:false
/有菜单,那么在restore
的时候,将主动多设置出菜单的高度,经验值是20px
。
窗体目标宽度300
,高度580
。演示代码如下:
重点代码:
判断是否为win
:
if(process.platform=="win32"){}
设置/获取窗体大小:
mainWindow.setSize(200,100);
mainWindow.getSize(); //[200,100]
隐藏系统菜单:
import { app,BrowserWindow,Menu } from 'electron';
Menu.setApplicationMenu(null);
判断是否存在菜单:
import { app,BrowserWindow,Menu } from 'electron';
var mm = Menu.getApplicationMenu();
if(!!mm){
//有菜单
}
else{
//没有菜单
}
相关链接
总结
在electron
官方正式解决这个问题之前,大家就可以用本文的思路临时解决问题了。本文的方案应该不是最佳方案,欢迎大家演绎此代码并完善。当然最好的办法,就是electron
官方真正的解决这个问题,不过也许只能慢慢等待了。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
学习一下
学习一下
Good.
学习!学习!
看看可以吗
大佬你好!我发现设置了最小高度和最小宽度,在electron中使用了webview打开网页,网页中有全屏按钮,点击按钮发现全屏之后里面的内容被遮住了,在低的分辨率里有些是总被遮住,但用浏览器里打开全屏没有遮住,我给最小高度和最小宽度注释就好了,低分辨率也可以了,这些是多么让人胆寒的bug,幸好找到原因了。
两台电脑:(窗口没有菜单)
第一台环境:win10,家庭普通版,electron 5.0.4,有问题
第二台环境:win10,企业版2015长期维护版,electron 5.0.4,没有问题