上篇文章說了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="support@mypage.com"
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="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
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="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
em:minVersion="2.0"
em:maxVersion="3.0.*"
em:updateLink="http://www.mypage.com/plugins/npmyplugin.xpi"
em:updateHash="sha1:665ff233cfdcb5ed610555f7777a4961931873a3" />
<RDF:Description RDF:about="urn:mozilla:extension:support@mypage.com"
em:signature="MIGTMA0GCSqGSIb3DQEBDQUAA4GBAJo4Sp+iJQSGesXd56BpDtTAWk0LcaSXKiK1+uo1pk
QFja+q6rJweNyu8A6o5zQmhIxOFsT0Oapz5KoATV8JilOmCJE8H+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,然后打開錯
誤控制臺,這樣就可以查看插件更新的具體錯誤了。