FireFox插件开发(三)—— scriptable实例

依然是官网的例子,下载地址是

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,文件名随便起,内容是

  1. ../sdk/bin/xpidl.exe -m header -I../sdk/idl %1  
  2. ../sdk/bin/xpidl.exe -m typelib -I../sdk/idl %1  

还要一些共用的文件要下载到该项目下

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文件中添加

  1. long  run(in  long  a, in  long  b);  

nsScriptablePeer.cpp中的实现

  1. NS_IMETHODIMP nsScriptablePeer::Run(PRInt32 a, PRInt32 b, PRInt32 *_retval)  
  2. {  
  3.     if (mPlugin)  
  4.         *_retval = mPlugin->run( a*a, b*b );  
  5.     return  NS_OK;  
  6. }  

plugin.h中加函数

  1. long  run( long  a, long  b);  

plugin.cpp中

  1. long  nsPluginInstance::run( long  a,  long  b)  
  2. {  
  3.     PRInt32 lTemp = 0;  
  4.     ISpecialThing *nsspecial;  
  5.     nsCOMPtr<nsIServiceManager> serviceMgr;  
  6.     NS_GetServiceManager( getter_AddRefs(serviceMgr));  
  7.     if (serviceMgr)  
  8.     {  
  9.         serviceMgr->GetServiceByContractID( "@starkravingfinkle.org/specialthing;1" , NS_GET_IID( ISpecialThing ), ( void **)&nsspecial);  
  10.           
  11.         if (nsspecial)  
  12.             nsspecial->Add( a*a, b*b, &lTemp );  
  13.     }  
  14.     NS_IF_RELEASE(nsspecial);  
  15.     return  lTemp;  
  16. }  

然后编译


接下来,将我们编写的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文件加个按钮和方法

  1. < input   type = button   value = "a*a+b*b"   onclick = 'Calc()'   >   
  2. function Calc()  
  3. {  
  4.     alert(embed.run(2, 3));  
  5. }  


13. 用FireFox打开该html,点按钮即可看到结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值