用C++编写XPCOM组件
还是先开看看官网给的例子,下载示例程序 xpcom-test
配置方法见文章 https://developer.mozilla.org/en/How_to_build_a_binary_XPCOM_component_using_Visual_Studio
没有必要下载该文章中的Gecko-SDK,如果使用较新版本的xul-runner,使用它的SDK就可以了,
如果不使用Gecko-SDK,直接使用xul-runner的SDK,项目的一些配置需要修改:
1、项目属性中的"附加包含目录位置为(xul-runner dirpath)/sdk/include,“附加库目录为”(xul-runner dirpath)/sdk/lib
2、由于XPCOM需要使用xpidl工具生成.h和.xpt文件,每次用命令行的方式比较繁琐,可以使用该例程中的批处理文件,示例程序中的xpidl-build.bat文件为执行该工作,设置项目属性中的“自定义生成步骤”->“命令行”->"xpidl-build.bat",这样在编译该项目的时候就会自动生成.h和.xpt文件
编译该项目,成功后生成的.dll文件和.xpt文件,现在我们来看看如何使用这个组件
测试组件
文章中介绍的测试组件方法写的太简单,完全摸不着头脑,经过不断的钻研,我提供出以下两种方法
方法一、通过网页调用
1、将dll和xpt文件放在FireFox的components目录下,windows下路径是C:/Program Files/Mozilla Firefox/components
2、删除profiles下的注册文件compreg.dat和xpti.dat,profiles在windows下路径是%appdata%/Mozilla/Firefox/Profiles/**.default
3、重新启动FireFox,打开xpcom-test.html网页
xpcom-test.html代码
note:netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");这句话一定要加,否则没有效果,折腾一下午就因为这个没加,怎么也调不出来,这句话是用来授权使我们可以访问浏览器的API
方法二、使用xulrunner
需要在磁盘上建立如下结构的目录和文件
{appname}这个名字随便写,就是随便给目录起个名字作为根目录,下面用到的"|"表示目录的深度
|-application.ini
|-chrome
||--chrome.manifest
||--xpcom-test
|||---test.xul
|-defaults
||--preferences
|||---prefs.js
|-components 这个目录下放编译好的dll和xpt文件
||--comp.xpt
||--test.dll
application.ini文件
chrome.manifest
test.xul
如果这个文件中需要控件用中文显示,需要保存为utf-8格式
prefs.js
这些文件都写好后,需要用命令行进入xulrunner.exe目录下,位置是xulrunner-sdk/bin
输入命令xulrunner {appname dir}/application.ini
就可以看到窗口的左上方出现一个带按钮的新窗口