我已经通过SDK创建了一个Firefox插件。
用户应该可以直接从我的网页安装。我按照这些指示https://developer.mozilla.org/en-US/docs/Installing_Extensions_and_Themes_From_Web_Pages
尚未经过审核/批准。
然而,我很困惑:
1)即使Mozilla图库中没有提供附加组件,附加组件是否必须经过审核过程?
我在尝试安装时遇到错误(“..与Firefox预期的附加组件不匹配。”)并且不知道这是否是因为其未经审核的状态。
2)看起来更新也必须经过审核过程。要使批准的更新生效,人们是否需要通过图库安装附加组件?或者他们可以通过我的网站添加它吗?有没有办法自动更新未经审核/批准的附加组件。
3)审批流程需要多长时间?发布附加组件真的需要几周时间吗?什么是'正常'?
更新怎么样?如果我发现代码中存在错误,或者需要进行改进,那么修复是否真的需要10天(!)才能应用于所有用户!?
3b)我的加载项仅在用户登录我的服务/网站时有效。它从网站收集数据,需要知道要将其发送到哪个帐户。如果您尚未登录,则会收到一条消息,请您登录。这样的附加组件是否可以获得批准?测试更加麻烦。
4)当我写这个附加组件时,我认为这与创建Chrome扩展程序类似,这实际上是即时的。 相反,这似乎是一个风险很大的繁琐过程;特别是缓慢的更新过程是风险因素。或者,我完全误解了什么?
答案 0 :(得分:2)
1)即使Mozilla图库中没有提供附加组件,附加组件是否必须经过审核过程?
在撰写本文时:是的,您可以自行托管/自行发布您的插件。
我们为一些附加组件的夜间版本执行此操作,例如https://github.com/scriptish/scriptish-nightlies/releases和https://code.downthemall.net/nightly/
我在尝试安装时遇到错误(“..与Firefox预期的附加组件不匹配。”)并且不知道这是否是因为其未经审核的状态。
当提供的哈希与您提供的XPI不匹配时,这是您获得的错误(或者在使用安装触发器时可能无法提供哈希)。
2)看起来更新也必须经过审核过程。要使批准的更新生效,人们是否需要通过图库安装附加组件?或者他们可以通过我的网站添加它吗?有没有办法自动更新未经审核/批准的附加组件。
对于AMO(addons.mozilla.org)托管的附加组件:是的,更新必须经过审核过程。
但是可以使用自定义updateURL
。请参阅this article,该公告暂时未更新,但通常仍应适用。
最重要的一点:
update.rdf
,并在updateURL
点install.rdf
(即提前计划)。{/ li>
update.rdf
必须格式正确,并且应包含哈希值(最好在IIRC时为sha-256)update.rdf
必须通过McCoy(PITA)或其他兼容工具(例如spock(也是PITA))签署的https 或提供。E.g。这是(自动生成的)update.rdf我们用于DownThemAll!夜间: http://code.downthemall.net/nightly/update-trunk.rdf
这是生成它的非常快速且非常脏的python脚本:
#!/usr/bin/env python2.7
import sys
from zipfile import ZipFile
from xml.dom.minidom import parseString
from hashlib import sha256
TMPL = """<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"><Description about="urn:mozilla:extension:dta@downthemall.net"><em:updates><Seq><li><Description>
<em:version/>
</Description></li></Seq></em:updates></Description></RDF>
"""
_,xpi,out,url = sys.argv
with open(xpi, "rb") as ip:
xh = sha256(ip.read()).hexdigest()
rdf = parseString(TMPL)
xpi = ZipFile(xpi)
inrdf = parseString(xpi.read("install.rdf"))
ver = inrdf.getElementsByTagName("em:version")[0]
el = rdf.getElementsByTagName("em:version")[0]
el.appendChild(rdf.createTextNode(ver.firstChild.nodeValue))
el = el.parentNode
for ta in inrdf.getElementsByTagName("em:targetApplication"):
d = ta.getElementsByTagName("Description")[0]
ul = rdf.createElement("em:updateLink")
ul.appendChild(rdf.createTextNode(url))
d.appendChild(ul)
uh = rdf.createElement("em:updateHash")
uh.appendChild(rdf.createTextNode("sha256:{0}".format(xh)))
d.appendChild(uh)
el.appendChild(ta)
with open(out, "wb") as op:
op.write(rdf.toxml())
3)审批流程需要多长时间?发布附加组件真的需要几周时间吗?什么是'正常'?
每个附加组件和总体工作负载会有所不同,但可能需要一些时间。有关更新,请参阅Add-ons blog。
更新怎么样?如果我发现代码中存在错误,或者需要进行改进,那么修复是否真的需要10天(!)才能应用于所有用户!?
总的来说是的,但是对于严重的错误,特别是安全问题或“一切都破了”的问题,你可以ping amo-editors进行快速审核,这可以显着降低审核时间。
3b)我的加载项仅在用户登录我的服务/网站时有效。它从网站收集数据,需要知道要将其发送到哪个帐户。如果您尚未登录,则会收到一条消息,请您登录。这样的附加组件是否可以获得批准?测试更加麻烦。
是的,这些附加组件经常被批准。但是,对于完整的评论,您通常需要提供一个测试帐户。
4)当我写这个附加组件时,我认为这与创建Chrome扩展程序类似,这实际上是即时的。相反,这似乎是一个风险很大的繁琐过程;特别是缓慢的更新过程是风险因素。或者,我完全误解了什么?
坦率地说,Chrome的审核过程非常喜欢开发人员而不是用户,而使用mozilla则是另一回事:用户排在第一位。 所以是的,特别是获得全面审核状态会更麻烦一些。而且需要更长的时间。
对于AMO,您可能会认为这是一种风险。另一方面,你仍然可以自我发布。
您也可以考虑免费咨询:AMO编辑会定期指出安全问题,包括代码缺陷。性能问题,功能缺陷等。因此,您可以免费获得另一层代码审查和QA测试。
(Chrome似乎声称他们的权限系统和沙盒阻止了大多数威胁,因此无需进行实际审核,但这一点非常错误,因为Chrome扩展恶意软件一次又一次地证明了这一点;您仍然可以偷饼干,对类固醇进行XSS治疗并做很多其他伤害。)