依然是官网的例子,下载地址是http://mxr.mozilla.org/seamonkey/source/modules/plugin/tools/sdk/samples/scriptable/
我要使用的平台是Windows
按照网页说明编译该项目:https://developer.mozilla.org/en/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio
需要说明的是,由于这个项目引用了xpidl语言,所以不应当再使用MS的MIDL编译器,需要修改一下设置,在将sIScriptablePluginSample.idl加入到项目后,选择该文件查看该文件属性,将"常规"->"工具"的值由"MIDL工具",修改为"自定义生成工具","自定义生成步骤"->"命令行"的值设置为"$(ProjectDir)script.bat $(InputFileName)","输出"的值改为"./$(InputName).h",如果你的项目的名称不是
npscript.bat,文件名随便起,内容是
还要一些共用的文件要下载到该项目下
http://mxr.mozilla.org/seamonkey/source/modules/plugin/tools/sdk/samples/include/
http://mxr.mozilla.org/seamonkey/source/modules/plugin/tools/sdk/samples/common/
然后,就可以编译该工程了
下面我们来看看如何使用这个程序调用我们之前写的xpcom-test组件
添加链接库的配置
"项目属性"->"链接器"->"输入"->"附加依赖项"的值设置为 xpcomglue_s.lib xpcom.lib nspr4.lib version.lib
"项目属性"->"链接器"->"常规"->"附加库目录"的值设置为 ../sdk/lib
idl文件中添加
nsScriptablePeer.cpp中的实现
plugin.h中加函数
plugin.cpp中
然后编译
接下来,将我们编写的plugin转成extension
步骤一、新建一个名为install.rdf的文件
<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:install-manifest">
<em:id>npscript@myplugin.com</em:id>
<em:name>npscript</em:name>
<em:version>1.0</em:version>
<em:type>2</em:type>
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>1.5</em:minVersion>
<em:maxVersion>3.0.*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
[说明]
1. 以邮件的格式比较好
2. 一定要有个名字标识
3. 版本信息可以自己描述,但是要满足 Toolkit version format
4. id{ec8030f7-c20a-464f-9b0e-13a3a9e97384}不可以修改,这个是FireFox的标识
步骤二、将生成的npscript.dll,nsIScriptablePluginSample.xpt放在一个Plugins的目录下,将Plugins和刚才的install.rdf文件放在目录npscript@myplugin.com(目录名要使用install.rdf中的em:id的值)下,用rar打个包,把后缀改为.xpi
目录结构是
npscript@myplugin.com
|-install.rdf
|-plugins/
||--npscript.dll
||--nsIScriptablePluginSample.xpt
|-comoponents
||--comp.xpt
||--test.dll
步骤三、把该目录npscript@myplugin.com放在Program Files/Mozilla Firefox/extensions下,重新启动FireFox
步骤四、将npscript项目下的test.html文件加个按钮和方法
13. 用FireFox打开该html,点按钮即可看到结果