上篇文章说了firefox plugin在不同平台之间的构建,接下来写下如何安装。
Plugin与extension的安装都可采用xpinstall文件来安装。plugin文件在windows上为dll,linux上为so,
mac os x上为bundle。Windows版的plugin文件名要以np开头,否则firefox不会识别。首先在当前目录下新建
文件夹plugins和install.rdf文件,将plugin文件放入plugins文件夹中,install.rdf文件是个xml格式,因此在各个
平台上的安装更新都没有差异性。在https://developer.mozilla.org/en/Install_Manifests中,你可以获得rdf的一切
参数规则。给个范例:
<?xml version="1.0"?>
<RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#"
xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/ 1999/02/22 -rdf-syntax-ns#">
<RDF:Description RDF:about="urn:mozilla:install-manifest"
em:id="[email protected]"
em:name="myplugin"
em:version=" 1.0.0 .1"
em:type="2"
em:description="mydescription"
em:creator="myname"
em:homepageURL="http://www.mypage.com"
em:updateURL="http://www.mypage.com/plugins/update.rdf"
em:updateKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMsAc9rp4UU0NDaR5oCGtN6JaHP
3b9/Lkc7rZ2fCmXK5Ma5glpTrbqWAAijOc5v2H+BuXLPZaCdN/kjs+okPCeTcyzVuuP3XmV
Fp+rAx49fDn9Rz0JldZiO5hvAygTK4bXRq7qegrxm/qYaunzs23E8W0tJ2LXHb5zqdswypXnZ
wIDAQAB">
<em:targetApplication RDF:resource="rdf:#$ZfNCh"/>
</RDF:Description>
<RDF:Description RDF:about="rdf:#$ZfNCh"
em:id="{ec 8030f 7-c 20a -464f -9b0e -13a 3a 9e97384}"
em:minVersion="2.0"
em:maxVersion="3.0.*" />
</RDF:RDF>
最下面这一段表示适用于firefox2.0版本到3.0.*的所有版本,可以修改这3个参数将plugin用于mozilla的其他
产品。
编写完install.rdf后,将其与plugins文件夹一起打包成zip格式,并将zip后缀名改为xpi,然后只要给出xpi
的URI,那么就可以安装xpi了。只要plugin编写正确,这里安装很容易成功的,然后再地址栏输入
about:plugins, 就能看见plugin的信息了。
下面来看看如何更新,firefox插件更新有3种方式,第一是通过addons.mozilla.org进行更新,这种方式使
得你不需要对插件进行任何更新说明,因为firefox和addons网站会帮你完成所有的这一切,但这样必须要取
得mozilla的许可才行,所以放弃。第二种方式是在install.rdf中添加updateURL,但要用https来进行更新,因
为https要用到mozilla的CA颁发的证书,配置起来太麻烦,也放弃。第三种办法是在install.rdf中添加
updateURL,用http来进行更新,但是要用公钥的方式进行认证,所以加上updateKey这个字段,防止有
人用虚假的插件进行欺骗。updateKey要用mozilla提供的mccoy进行生成,具体用法可以参考官方网站。
update.rdf中列出了各个可用更新版本和其URL地址,范例如下:
<?xml version="1.0"?>
<RDF:RDF xmlns:em="http://www.mozilla.org/2004/em-rdf#"
xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/ 1999/02/22 -rdf-syntax-ns#">
<RDF:Description RDF:about="rdf:#$3gNCh"
em:version=" 2.0.0 .1">
<em:targetApplication RDF:resource="rdf:#$6gNCh"/>
</RDF:Description>
<RDF:Seq RDF:about="rdf:#$2gNCh">
<RDF:li RDF:resource="rdf:#$3gNCh"/>
</RDF:Seq>
<RDF:Description RDF:about="rdf:#$6gNCh"
em:id="{ec 8030f 7-c 20a -464f -9b0e -13a 3a 9e97384}"
em:minVersion="2.0"
em:maxVersion="3.0.*"
em:updateLink="http://www.mypage.com/plugins/npmyplugin.xpi"
em:updateHash="sha1:665ff233cfdcb5ed 610555f 7777a 4961931873a 3" />
<RDF:Description RDF:about="urn:mozilla:extension:[email protected]"
em:signature="MIGTMA0GCSqGSIb3DQEBDQUAA4GBAJo4Sp+iJQSGesXd56BpDtTAWk0LcaSXKiK1+uo1pk
QFja+q6rJweNyu 8A 6o5zQmhIxOFsT0Oapz5KoATV8JilOmCJE8H+DjXUMYdaqzih0VPBZAAXE
wxphIN5ctnhwz2rN9nSGF18PSu7WuBIQIoWd1E0+ujf4+t/lnQCXqJHlK">
<em:updates RDF:resource="rdf:#$2gNCh"/>
</RDF:Description>
</RDF:RDF>
updateHash是用来对要更新的文件的一个hash,这里用的算法是sha1,可以通过GNU的sha1sum工具来生
成,最后要用mccoy对这个文件进行签名。OK了,只要有新的版本就可以在firefox上进行更新了。如果更新
发生错误,那么就打开about:config页面,修改其中的一个字段extensions.logging.enabled为true,然后打开错
误控制台,这样就可以查看插件更新的具体错误了。