Safari插件Aria2Helper开发踩坑集
- Published on
- Authors
- Name
- Wxm
花了大概 1 周多时间,断断续续终于把这个 Aria2Helper 插件完成了。如果使用有什么问题也可以邮寄联系我,或者在 github 上提 issue。
项目地址: Aria2Helper for Safari
App 文件: Aria2Helper for Safari.zip
商店链接
也欢迎去 App Store 下载,支持一下我的开发。
为何而做
Safari 本身的下载器无法断点续传,下载大文件到一半断网后重新下载需要重新下载,实在是让人崩溃。如果想使用其他下载方式则需要复制粘贴下载链接,如果需要下载的链接一多真的是鼠标点爆炸。在 chrome 有很多好用的插件可以通过设置 rpc 来想配合 Motrix 下载文件,而且都包含下载拦截功能,在我搜索了 app store 之后也没有看到相关功能的插件。于是决定自己开发一个。
主要功能
- 通过多种方式在 Safari 中快速添加下载链接到 Aria2
- 实时显示 Aria2 的任务下载进度
- 支持 Aria2 的多种功能,如暂停、删除、强制开始、强制暂停、强制移除等
- 支持对点击下载链接拦截,使用 aria2 代替 Safari 下载
遇到的一些问题与解决
- safari 不支持 notification
在mdn notification 文档最下面可以看到 safari 并不支持,但是我确实有在其他 safari 中看到调用 notifications 的案例。其实他们是使用的 app 端口的 notifications API,需要将信息从 web 项目发送到 app 端,然后通过 app 展示。
- safari 不支持 browser.download API
本来想用 browser.download 这个来实现获取默认下载然后发送 aria2 的,但是safari 不支持 browser.download API,于是考虑其他方案,经过尝试,选择了拦截用户点击请求的方式,拦截后获取点击链接中的文件链接,然后发送到 aria2。
- web 插件开发中 popup 页面的背景问题
我在插件中的 popup 页面,的很多地方使用了透明背景,如果是第一次运行,它会像 chrome 插件一样显示白色或黑色的背景(根据电脑是否黑暗模式),但是当你的 safari 运行一段时间后,它的背景色会消失,变成苹果的磨砂玻璃背景,虽然很好看,但是完全随机发生,目前没有好的解决办法。
- 动态获取并设置 body 宽度造成的问题
因为我是希望开发一个外观类似 safari 本身下载器外形的插件,所以想动态设置 body 宽度。 具体实现是先将 body 的宽设置为 auto,在打开 popup 页面是根据下载项中的最宽一项设置 body 宽度,但这样会在打开的一瞬间 body 还没有设置 width,导致页面大小闪烁,无法接受,最后还是选择了使用固定宽度。
- app 开发模式中的调试问题
其中有一个 os_log()
函数用于调试,但是输出不知道在哪,后来才发现是系统自带 console.app,在这里面搜索就能看到,记得打开流式传输。
还有,如果使用 %@
来作为占位符,则在控制台中会显示 "pravite" 标签 ,如果像明文显示信息,可以使用 %{public}s
来作为占位符。
- xcode 打包之后,再 run 有概率会让 safari 的 app 出现错误
解决办法就是 product -> clean build folder,如果还是有问题就打开 build 文件夹 Show Build Folder in Finder,然后将里面的文件夹都删了,在重启 safari 就好了。
- 关于在 css 中使用系统色
background: -apple-system-control-accent;
https://stackoverflow.com/questions/62797493/how-can-i-use-the-macos-system-accent-color-in-css
最后
比预计多花了不少时间,但是总算是完成了,后续再慢慢优化吧。
也想总结下 safari 插件开发的一些经验,方便以后开发。