当前位置: 首页 > 科技观察

基于Electron开发Hosts切换工具的“踩坑”之旅

时间:2023-03-21 16:39:27 科技观察

使用过好几款Hosts切换工具,但总是出现这样或那样的问题。最烦的是,切换之后,键盘几乎坏掉了,浏览器里的Hosts没变。在网上找了很多方法,但是感觉都不是很完善,于是想出了这篇文章。说到桌面应用,Electron一直想开发一个跨平台的应用。学习Qt后,偷了一些QQ资料,搭建了一个简单的IM。不过,由于C++基本属于语法入门阶段,写点东西倒是没错。费劲。近年来,Electron突然火了起来,诞生了很多好用的应用。Electron本身基于Chromium和Node.js,允许您使用HTML、CSS和JavaScript构建应用程序。简单的说就是浏览器的外壳,里面包含HTML页面,但是拥有浏览器以外的能力。作为一个PHP程序员,你必须懂JavaScript,你可以假装懂Node.js。我使用了各种第三方库electron-vue并查看了Electron文档。无从下手,然后找到了electron-vue。几行命令可以帮助您初始化项目。Element-UI由饿了么出品,一个基于Vue的UI组件库。CodeMirror代码编辑器插件神器,提供了超超超超超多的功能和配置。chrome-remote-interface是Chrome调试协议的第三方调试客户端实现,为node程序提供api,是Chrome想要实时生效的关键工具。lowdb这个名字虽然低,但是很好用。本地存储的一个JSON数据库(其实我也懒得操作JSON了。)上面写了很多坑,基本上都是介绍。以下是我在开发过程中遇到的问题。事实上,其中大部分是我自己的。是不善于学习,思维不清晰造成的。MainProcess&&RenderProcessElectron应用程序使用main(主进程)和一个或多个renderer(渲染进程)同时运行多个程序。开发的时候没有想太多,有些功能实现的时候也是一头雾水。比如托盘菜单(main)切换Hosts时,需要同步更新页面(renderer)中的勾选状态。这个时候才看文档,发现他们提供了进程间的IPC通信方式,导致代码逻辑和结构优化上有大量改动。如果你的应用有类似的功能,在开发前一定要想清楚各种事件消息是如何相互传递的。管理得当。不同进程从数据库中获取的数据是不一致的。看了半天lowdb的文档,没看懂。不就是读文件,都写成功了(同步方式),其他进程就是读不出来吗?初步怀疑,数据保存在内存中(同步机制未知)。突然发现一篇lowdb的介绍提到了Lodash(不知道是什么),看了之后才知道constdb=low(adapter)返回的是一个Lodash实例,只有write()和read()被触发才是真正对文件进行操作。单进程没问题,多进程就好了。操作数据不一致。解决方法是读取时先read():db.read().get('hosts'),Done。该目录不存在。当你兴冲冲的把申请递给同事,他们打开的时候,报了个大错(困惑+尴尬)。原来app.getPath('userData')获取的目录默认是不存在的。运行前添加目录判断,没有则创建。程序打包后不能复制粘贴。上网查了一下,发现在Mac程序中如果需要复制粘贴,需要在菜单中添加。代码如下:if(process.platform==='darwin'){consttemplate=[{label:'MyAppName',submenu:[{label:'Quit',accelerator:'Command+Q',点击:()=>{app.quit()}}]},{label:'Edit',submenu:[{label:'Copy',accelerator:'CmdOrCtrl+C',selector:'copy:'},{label:'Paste',accelerator:'CmdOrCtrl+V',selector:'paste:'}]}]Menu.setApplicationMenu(Menu.buildFromTemplate(template))}