http://bbs.sjtu.edu.cn/bbstcon?board=GNULinux&reid=1234626263
如何写firefox的扩展(注意,这里是extension,
和plugin还是有一定区别的)。这次的实例选的是看comic的插件。虽然若干年前的前辈
门为了让在linux下也能享受到comic已经写好了相当不错的extension,大家可以直接拿
来用。不过因为暂时没想到有什么比较简单的插件(HelloWorld除外)可以作为入门教
程,并同时让大家练练手的,就只有拿这个开刀了~还是希望能有人对这个有兴趣,有朝
一日弄出个我们SJTUer自己的Firefox版本来~废话到此为止,下面进入正题!
一. 基础知识
最直接了当的入门请猛击这里:https://developer.mozilla.org/en/Extensions
当然,如果这篇文章我什么也不介绍,肯定会被人诅咒的。于是,我就稍微说几句
来实现脱盲。
首先,我们要知道,extension,扩展,顾名思义就是给firefox添加新功能的。比
如对于我们亲爱的comic.sjtu.edu.cn,“裸体”状态下的firefox中浏览点击播放图标
,我们的小萌狐狸是不会理你的,这时候,就需要给她弄点extension来调教调教,教教
她如何service。调教步骤如下:
1.从网上找一个扩展,或者自己写一个;
2.给小萌狐穿上这个扩展;
3.“X掉,再打开”。这时候就已经调教完毕可以正常服务了。
本文是教你如何写扩展,我们就要了解一下firefox扩展的文件格式。从网上下载下
来的都是个xpi后缀名的包,其实也就是个zip格式的包改了个名字而已。把这个包拖到f
irefox上就能进行安装。具体这个压缩包有些什么,我将在下一节和实例一起介绍~
最后,说说想在小狐狸身上打主意都需要些什么要求:
1.一定要是怪叔叔,例如sudo;
2.会用电脑,要装有firefox(连情人都没有,怎么能过情人节~);
3.懂英语,很可惜,这是只洋loli;
4.(最好)看的懂HTML,JAVASCRIPT,XML。以上。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
二. 开发一个comic扩展
这里,不会系统的教你如何去开发一个firefox的扩展,我没那本事。我只能以一个
看comic的小扩展作为例子,让你理解下firefox的扩展。至于能理解到什么程度,看你
造化了
showContextMenu: function() {
document.getElementById(“play-comic”).hidden = true;
if (comic.getURL()) {
document.getElementById(“play-comic”).hidden = false;
}
},
//这个是是否显示菜单项~当然只有在有vod的URL的情况下才显示,
//否则多出个menuitem多难看~
//这里注意那些id的匹配~
callProcess:function(path,args){
var file = Components.classes[“@mozilla.org/file/local;1”]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(path);
var process = Components.classes[“@mozilla.org/process/util;1”]
.createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, args, args.length);
},
//firefox调用外部程序,我稍微包装了下,参数为程序路径和穿的参数
//这里参数也就是vod视屏的链接啦
play:function(){
var path =Components.classes[“@mozilla.org/preferences-service;1”]
.getService(Components.interfaces.nsIPrefBranch)
.getCharPref(“sjtu.comic.mplayer”);
var URL = comic.getURL();
var args = [];
args.push(URL);
comic.callProcess(path,args);
}
};
//播放函数,当在菜单中点击时就调用这个,其先从配置中读取mplayer的位置
window.addEventListener(“load”, function(e) { comic.onLoad(e); }, false);
//这个自己理解:)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
三. 小结
总觉得在关键的地方写的太少了~算了反正代码也不长,读起来也不算太难大家自己
理解理解吧:)这个版本是被我“和谐”后的~也就是隐藏了#XX#功能后的版本,也做了
很大的简化,在linux下是非常正常的运行的,windows下只能搞搞文件路径中没有中文
的。当然,当做教学使用应该是足够了。有什么问题和建议都欢迎来GNULinux提~也欢迎
更多的人参与到开发中来,体验开发的乐趣:)
代码:(xpi文件)
http://bbs.sjtu.edu.cn/file/GNULinux/1234626218274327.xpi
附一:
对于mplayer:
linux下推荐使用打过utf的vod补丁的,推荐smplayer前端
扩展配置中直接输入位置,如/usr/local/bin/mplayer,/usr/local/bin/smplayer
windows下推荐使用ww编译版(http://mplayer-ww.sourceforge.net/)
扩展配置重输入位置,斜杆需转义,如C:\Program Files\mplayermplayer.exe
附二:
开发出来的扩展的打包:用压缩软件打包成zip格式文件,然后修改后缀为xpi即可
==================>>>>>> <<<<<<=====================
code ( 稍有修改 ):
overlay.jsvar comic = {
onLoad: function() {
this.initialized = true;
document.getElementById(“contentAreaContextMenu”)
.addEventListener(“popupshowing”,this.showContextMenu,false);
},
getURL:function(){
var URL;
if (gContextMenu && gContextMenu.onLink) {
var result = gContextMenu.linkURL.match(/.(.rmvb|.avi|.flv|.mp3)./ig);
if(result) {
URL = encodeURI(result);
URL = unescape(URL);
}
return URL;
}
},
showContextMenu: function() {
document.getElementById(“play-comic”).hidden = true;
if (comic.getURL()) {
document.getElementById(“play-comic”).hidden = false;
}
},
callProcess:function(path,args){
var file = Components.classes[“@mozilla.org/file/local;1”]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(path);
var process = Components.classes[“@mozilla.org/process/util;1”]
.createInstance(Components.interfaces.nsIProcess);
process.init(file);
process.run(false, args, args.length);
},
play:function(){
var path =Components.classes[“@mozilla.org/preferences-service;1”].
getService(Components.interfaces.nsIPrefBranch).getCharPref(“sjtu.comic.mplayer”);
var URL = comic.getURL();
var args = [];
args.push(URL);
comic.callProcess(path,args);
},
};
window.addEventListener(“load”, function(e) { comic.onLoad(e); }, false);