项目源码可在GitHub上查看https://github.com/nashaofu/dingtalk。由于平台审核,导致文章内容有删减,如需查看完整文章,请移步nashaofu在路上
声明
本作品只是自己开发的练习作品,没有用于任何商业目的,开源出来也就为了方便他人,如有问题请在Github上联系我。也请各位不要把这个版本的钉钉用于其他目的。
我为什么要做这个版本
其实我想应该有很多人都想问,为什么钉钉团队不推出Linux版本的钉钉,尤其是钉钉采用的技术是可以跨平台的。
开发Linux版的钉钉是在我使用Linux后开始萌发的,由于公司是使用钉钉办公,所以有时候传文件什么的非常不方便。最开始是网页版的钉钉,后来在chrome里面找到了一个钉钉的应用(应用页面里包裹了一个webview标签,标签URL链接到钉钉网页版)。但说句实话,这两个使用起来都很蛋疼。首先,页面主区域不能最大化;其次是总要开一个窗口,感觉用起来总是很别扭,有时候不小心就会把窗口给关掉了。
项目实现功能
- 首先解决了上面说到的问题
- 支持新消息提示(显示出通知和未读消息徽章)
- 支持版本更新检测
- 任务栏显示应用图标,并支持快速打开和右键菜单
- 添加支持对文本的邮件菜单复制与粘贴
- 添加了热更新功能支持(修复一些小BUG用,否者每次都只能狗重新下载安装才能解决BUG)
- 支持屏幕截图,并且支持多显示器截图。截图快捷键为
ctrl+alt+a
项目中遇到的问题
- 对于外部文件引入时的安全问题
- 在界面右上角的几个按钮使用到了iconfont,但在引入iconfont文件时出现了问题,页面采用的时https协议,所以不允许http或者其他的协议引入资源(base64也是不可以的),最后采用直接从iconfont上引入的方式解决。
-
在做热更新和版本更新检测的时候,本来是打算吧这部分代码写到渲染进程的,但后来发现页面中指定了跨域请求的范围,即只有声明的域才能够访问,如下图所示
最后的解决方案是把,这些请求都放到主进程,这样就避免了这个问题。
- 消息提示功能,对于这个问题,我也是参考了electron版本的微信之后干的,采用很暴力的办法,就是每2s扫描一下消息列表dom元素,获取dom上的徽章数值之和,然后把这个设置到徽章上。其次是系统提示信息的展示,对于这个electron文档中没有提及到,但后来查到直接使用Notification就行了。