移植有道云笔记扩展程序到Firefox
最近尝试迁移到Firefox,有很多Chrome没有的玩意,除了极个别扩展程序不能使用,总体体验较好
使用
地址在这里,下载安装就好了
代码开源在 https://github.com/ttttmr/YoudaoNote-FirefoxAddons,欢迎提issues和pr
开发之路
在移植开发的过程中的一点笔记吧
我不太熟悉前端,JavaScript一通乱写,也没开发过浏览器扩展,以至于之前的坑还没有填
下载
第一步当然是下一个Chrome版扩展了,官方下不到可以去这里下 https://chrome-extension-downloader.com/
还有一个办法是安装好了之后找到本地路径
开发者模式,复制对于扩展的ID,然后用Everthing搜一下就出来了
文档学习
目标是开发Firefox扩展,当然是先去看文档了 https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions
先了解整体结构,从Getting_started的例子入手
manifest.json
撸完Getting_started大概就有概念了,对照下好的Chrome的扩展把manifest.json改好
把对应的值复制一下,加点描述就基本上完事了
JavaScript APIs
两个浏览器扩展不兼容的根本原因就是API不一样,所以主要工作就是把原本调Chrome的API改成Firefox能用的
比如Chrome里很多都是chrome.开头,查看文档Firefox里对应改成browser.
1 | chrome.contextMenus.create({ |
就这样查文档,然后替换关键字,会发现有很多Chrome的API不被支持,需要用另外一个实现,这时就需要注意它们调用方式是否一致,参数,返回值等等,做对应的更改
比如chrome.extension.sendRequest不支持需要用runtime.sendMessage

坑点
有那么一个函数,它们名字一模一样,我就没注意,直接替换关键字,然后debug发现有问题…
tabs.executeScript,函数名一模一样,Chrome多了一个callback,而Firefox没有…
https://developer.chrome.com/extensions/tabs#method-executeScript
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript
然后有道云笔记里用到了callback…
callback很常见其他地方我也用过,看了Firefox里的感觉很有意思,它提供了匿名函数的返回值,叫Promise,然后用then调用
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
这样似乎是比callback要好,可以实现不即时调用,到需要的再用then调用,当然牺牲了一些存储空间
想想这和直接返回值有什么区别,都可以实现不即时调用,或许是更方便吧
总之折腾了一晚上还算是能用了
已知问题
选择图文混合无法右键保存(单文字或图片没问题)..
经常会出现“抱歉,由于页面设置,页面抓取失败!”..
嗯,以上都是有道的锅