読み込んでいます...

好久没有更新Firefox插件开发系列了,最近工作比较闲,就来说说Firefox插件的开发中一些技巧吧。我相信看过了前面的一些小结并且自己亲手做了一些小应用的人来说,Firefox插件开发应该不算什么很难的事情了,但是我相信在开发插件的时候,肯定遇到过很多让人头疼的事情,比如Profile管理,编译等等,现在我们就来看看Firefox中是怎样自定义标记和编译的吧。

我们可以看到在项目属性中,我们设置了若干属性,这些属性包括应用程序的名称啊,作者啊,描述等等等等,这些定义了之后,我们就可以在程序中使用了。在上一节中我们已经讲解了如何自定义项目属性了,例如我们在程序中,可以使用{appname},{appid}去进行标识,同样我们也可以使用{guojing}进行标识,这里我们可以看到下面的图片,里面有两个重要的文件夹,其中一个是src,这个主要是放源代码的地方,另一个是nbproject,这个文件夹就是定义编译和自定义属性的位置。

其中有两个文件比较重要,这里就是project-moz.properties文件和build-moz-impl.xml文件,其中在project-moz.properties文件中,是定义我们的属性,打开这个文件我们就能够看到项目的一些基本属性了,这里包括appname,appid的定义,在这里定义了之后,我们暂时还不能够使用{appname}的标记进行程序的使用,这里还要知道上一节中说的,怎样让编译的时候知道如何替换。

我们再来看一下这个插件是如何工作的。首先这个插件会找到这些文件,进行一定逻辑的筛选,然后替换这些文件中的关键字,最后打包变成扩展。其中这些关键字就是我们在project-moz.properties文件中定义的了,但是让“编译器”认识,我们还得在build-moz-impl.xml文件中定义。build-moz-impl.xml文件就相当于编译器的config,我们可以在里面自定义参数进行不同情况下的build。Ok,还是回来,为了解决自定义的参数问题,(上一节也已经说了),这里要定义一些内容,代码如下。

<replacetokens begintoken="{" endtoken="}">
    
<token  key="appname" value="${appname}"/>
    
<token  key="appid" value="${appid}"/>
    
<token  key="appversion" value="${appversion}"/>
    
<token  key="auther" value="${auther}"/>
    
<token  key="appdisplayname" value="${appdisplayname}"/>
    
<token  key="appdescription" value="${appdescription}"/>
    
<token  key="targetApplications" value="${targetApplications}"/>
    
<token  key="appbuttonimage" value="${appbuttonimage}"/>
    
<token  key="appimage" value="${appimage}"/>
    
<token  key="appflag"  value="${appflag}"/>
</replacetokens>

上面我定义了appimage和appflag,appimage是图片的意思,如果我想更换图片,直接在前面的文件中修改值就可以了,而不用在代码中改。好,但是这只是编译的一小部分,我们看看build-moz-impl.xml里面还有什么内容。

我们知道这个编译器其实就是打包了一下我们的程序而已,那么它怎么知道哪些文件要,哪些不要呢,这就要看fileset节点了,代码如下。

<fileset dir="${src.dir}">
    
<include name="content/**/*.manifest" />
    
<include name="content/**/*.properties" />
    
<include name="content/**/*.js" />
    
<include name="content/**/*.rdf" />
    
<include name="content/**/*.xul" />
    
<exclude name=".*" />
    
<exclude name="**/CVS/**" />
    
<exclude name="**/Thumbs.db" />
</fileset>

这样是不是一目了然呢,如果你要编译自己的文件到扩展里面,可以在这里增加内容,例如我想放一些定义的文件在扩展中又怕编译器不给我编译,直接在这里加上就可以了。

在这里,我们可以看到每一个target都有一个行动的目标,比如拷贝文件,删除文件,打包文件等等。同样,在Netbeans中,执行一些清理操作也同样使用了该文件的定义,我们可以看到下面的代码。

<target name="clean">
    
<delete dir="${dist.dir}" />
    
<delete dir="${build.dir}" />
</target>

怎么样,这个编译器的原理并不难理解吧。其实对于Netbeans的Firefox插件的编译器来说,原理是不是很难理解,虽然在工作中不需要很清楚的理解这些东西到底是如何工作的,但是我相信如果熟练的掌握这些,会对你的开发有很大的帮助的。

339路过 1评论 Firefox Addon 阅读全文..
  1. 置顶的更新,文章汇总 : GuoJing's Blog | 用心对待每一行代码 @

    [...] Firefox Add-on – 编译器的一些小把戏 [...]

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »