有没有办法将Chrome扩展程序移植到其他浏览器,而无需完全重写代码?我的Chrome扩展程序使用browser_action命令在扩展程序窗口中打开“popup.html”...
更新:我找到了adblockforchrome port.js,发现它只对移植到Safari有点帮助......
答案 0 :(得分:5)
Apple provides some guidance有关如何将Chrome扩展端口转换为Safari的问题,但您遇到的问题是每个浏览器都有一组不同的扩展功能。即使使用Chrome浏览器,也可以使用Chrome浏览器无法在Safari中执行的操作,反之亦然。
答案 1 :(得分:4)
这取决于扩展的类型,但不是真的。要更清楚地回答您的问题,您需要指定扩展程序的内容:修改某些页面(如userscripts / userstyles),扩展浏览器的功能或其他内容。
但是,有一些可移植性说明可以帮助您简化此过程:
答案 2 :(得分:4)
迟到了。
我们的公司 - Slice Factory(此处完全披露!)确实提供了浏览器扩展转换服务:http://gallery.extensionfactory.com/labs/conversion/ 在大多数情况下,您的chrome扩展程序将在FF和Safari中无缝运行。
该服务仍处于测试阶段,Firefox转换效果优于Safari。 我不能完全透露我们的技术解决方案是什么,但这是一个SO答案,我可以添加一些细节:我们重新开发了一个完整的javascript api堆栈,模仿大多数用于Safari和Firefox的chrome扩展API;在Firefox中,我们的工作基于JetChrome。另外,我们有包装器重新打包chrome扩展,添加我们的库并重写清单等等。
除此之外,它主要是一些好的想法,反复试验和大量的开发时间。
举个例子: Safari 5.1刚刚推出了一个与Chrome的browser_action相对应的弹出窗口,但我们已经有了一个适用于以前版本的替代解决方案。 Firefox不支持HTML5 WebSQL,但我们有一个API。我们还提供了一种将Web应用程序引入FF的方法,并很快将其用于Safari。 目标是将Chrome API作为参考,并在所有其他浏览器上模仿它。
如果不推动您使用我们的解决方案,我可能会补充说,在Safari和Firefox上完全覆盖Chrome API的时间可能不值得 - 除非您计划转换多个扩展程序。因此,对于一两个扩展,我建议尽可能使代码模块化,只需创建三个扩展 - 或者尝试我们的服务!
答案 3 :(得分:0)
是的,可以使用webextension-polyfill的Webextension API。
我利用它来构建this,在这里我只需要将回调方法更改为Promises,并使用browser.something
而不是chrome.something
来调用浏览器API。