描述图片

Safari插件Aria2Helper开发踩坑集

Published on
Authors
  • Name
    Wxm
    Twitter

花了大概 1 周多时间,断断续续终于把这个 Aria2Helper 插件完成了。如果使用有什么问题也可以邮寄联系我,或者在 github 上提 issue。

项目地址: Aria2Helper for Safari

App 文件: Aria2Helper for Safari.zip

商店链接

也欢迎去 App Store 下载,支持一下我的开发。

Download on the Mac App Store

为何而做

Safari 本身的下载器无法断点续传,下载大文件到一半断网后重新下载需要重新下载,实在是让人崩溃。如果想使用其他下载方式则需要复制粘贴下载链接,如果需要下载的链接一多真的是鼠标点爆炸。在 chrome 有很多好用的插件可以通过设置 rpc 来想配合 Motrix 下载文件,而且都包含下载拦截功能,在我搜索了 app store 之后也没有看到相关功能的插件。于是决定自己开发一个。

主要功能

  1. 通过多种方式在 Safari 中快速添加下载链接到 Aria2
  2. 实时显示 Aria2 的任务下载进度
  3. 支持 Aria2 的多种功能,如暂停、删除、强制开始、强制暂停、强制移除等
  4. 支持对点击下载链接拦截,使用 aria2 代替 Safari 下载

遇到的一些问题与解决

  1. safari 不支持 notification

mdn notification 文档最下面可以看到 safari 并不支持,但是我确实有在其他 safari 中看到调用 notifications 的案例。其实他们是使用的 app 端口的 notifications API,需要将信息从 web 项目发送到 app 端,然后通过 app 展示。

  1. safari 不支持 browser.download API

本来想用 browser.download 这个来实现获取默认下载然后发送 aria2 的,但是safari 不支持 browser.download API,于是考虑其他方案,经过尝试,选择了拦截用户点击请求的方式,拦截后获取点击链接中的文件链接,然后发送到 aria2。

  1. web 插件开发中 popup 页面的背景问题

我在插件中的 popup 页面,的很多地方使用了透明背景,如果是第一次运行,它会像 chrome 插件一样显示白色或黑色的背景(根据电脑是否黑暗模式),但是当你的 safari 运行一段时间后,它的背景色会消失,变成苹果的磨砂玻璃背景,虽然很好看,但是完全随机发生,目前没有好的解决办法。

  1. 动态获取并设置 body 宽度造成的问题

因为我是希望开发一个外观类似 safari 本身下载器外形的插件,所以想动态设置 body 宽度。 具体实现是先将 body 的宽设置为 auto,在打开 popup 页面是根据下载项中的最宽一项设置 body 宽度,但这样会在打开的一瞬间 body 还没有设置 width,导致页面大小闪烁,无法接受,最后还是选择了使用固定宽度。

  1. app 开发模式中的调试问题

其中有一个 os_log() 函数用于调试,但是输出不知道在哪,后来才发现是系统自带 console.app,在这里面搜索就能看到,记得打开流式传输。

还有,如果使用 %@ 来作为占位符,则在控制台中会显示 "pravite" 标签 ,如果像明文显示信息,可以使用 %{public}s 来作为占位符。

  1. xcode 打包之后,再 run 有概率会让 safari 的 app 出现错误

解决办法就是 product -> clean build folder,如果还是有问题就打开 build 文件夹 Show Build Folder in Finder,然后将里面的文件夹都删了,在重启 safari 就好了。

  1. 关于在 css 中使用系统色 background: -apple-system-control-accent; https://stackoverflow.com/questions/62797493/how-can-i-use-the-macos-system-accent-color-in-css

最后

比预计多花了不少时间,但是总算是完成了,后续再慢慢优化吧。

也想总结下 safari 插件开发的一些经验,方便以后开发。

0:00/0:00

植松伸夫 - フィナーレ

植松伸夫 - プレリュード

笹井隆司 - 異郷の町

伊藤賢治 - Rising Sun

植松伸夫 - 街のテーマ

植松伸夫 - 怒闘

植松伸夫 - コーネリア城

植松伸夫 - チョコボのテーマ