JS编写xpcom的实现
2011-04-07 15:58
141 查看
很久之前的文档,拿过来分享。不过现在 Gecko2.0 了,所以有些细节可能有变动,目前还没有对 Gecko2.0 进行研究。待续。
目的:领会JS实现XPCOM的思想。
JS实现的xpcom需要和xpt放在一个文件夹下,即components文件夹下。
(同理,c++实现的xpcom 即 dll文件 需要和xpt放在同一个文件夹下,也是components文件夹下)。
文档网址:
http://developer.mozilla.org/en/How_to_Build_an_XPCOM_Component_in_Javascript
编译命令设置:
{sdk_dir}/bin/xpidl -m typelib -w -v -I {sdk_dir}/idl -e HelloWorld.xpt HelloWorld.idl
编译命令举例:
D:/sourcecode/xulrunner-sdk/xulrunner-sdk-1.9/seamonkey-xulrunner-sdk/bin/xpidl
-m typelib -w -v -I
D:/sourcecode/xulrunner-sdk/xulrunner-sdk-1.9/seamonkey-xulrunner-sdk/idl
-e
D:/log/IMService.xpt
D:/IMService.idl
编译中遇到的问题:
1.编码问题:xpidl是不识别UTF-8的。有点晕。
2.路径中不能有空格。
在一个组件中添加多个接口的实例:
IMService.idl
#include "nsISupports.idl"
[scriptable, uuid(EED9537B-E056-4f0d-834A-6AEDF8E5B14A)]
interface ceopIIMService: nsISupports {
};
[scriptable, uuid(3CBED3C4-A0D8-11DD-AF3E-E43F56D89593)]
interface ceopIIMAccountService: nsISupports {
};
IMService.js
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
// utils
const Cc=Components.classes;
const Ci=Components.interfaces;
/***********************************************************
class definition
***********************************************************/
// class constructor
function IMService() { }
// class definition
IMService.prototype = {
// properties required for XPCOM registration:
classDescription: "CE IMService",
classID: Components.ID("{AD3F34D6-9688-11DD-B0C5-F7CC56D89593}"),
contractID: "@c.cn/IMService;1",
QueryInterface: XPCOMUtils.generateQI([Ci.ceopIIMService, Ci.ceopIIMAccountService
]),
.....
};
var components = [IMService];
function NSGetModule(compMgr, fileSpec) {
return XPCOMUtils.generateModule(components);
}
(哈哈,一个包含多个接口的组件完成了。)
目的:领会JS实现XPCOM的思想。
JS实现的xpcom需要和xpt放在一个文件夹下,即components文件夹下。
(同理,c++实现的xpcom 即 dll文件 需要和xpt放在同一个文件夹下,也是components文件夹下)。
文档网址:
http://developer.mozilla.org/en/How_to_Build_an_XPCOM_Component_in_Javascript
编译命令设置:
{sdk_dir}/bin/xpidl -m typelib -w -v -I {sdk_dir}/idl -e HelloWorld.xpt HelloWorld.idl
编译命令举例:
D:/sourcecode/xulrunner-sdk/xulrunner-sdk-1.9/seamonkey-xulrunner-sdk/bin/xpidl
-m typelib -w -v -I
D:/sourcecode/xulrunner-sdk/xulrunner-sdk-1.9/seamonkey-xulrunner-sdk/idl
-e
D:/log/IMService.xpt
D:/IMService.idl
编译中遇到的问题:
1.编码问题:xpidl是不识别UTF-8的。有点晕。
2.路径中不能有空格。
在一个组件中添加多个接口的实例:
IMService.idl
#include "nsISupports.idl"
[scriptable, uuid(EED9537B-E056-4f0d-834A-6AEDF8E5B14A)]
interface ceopIIMService: nsISupports {
};
[scriptable, uuid(3CBED3C4-A0D8-11DD-AF3E-E43F56D89593)]
interface ceopIIMAccountService: nsISupports {
};
IMService.js
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
// utils
const Cc=Components.classes;
const Ci=Components.interfaces;
/***********************************************************
class definition
***********************************************************/
// class constructor
function IMService() { }
// class definition
IMService.prototype = {
// properties required for XPCOM registration:
classDescription: "CE IMService",
classID: Components.ID("{AD3F34D6-9688-11DD-B0C5-F7CC56D89593}"),
contractID: "@c.cn/IMService;1",
QueryInterface: XPCOMUtils.generateQI([Ci.ceopIIMService, Ci.ceopIIMAccountService
]),
.....
};
var components = [IMService];
function NSGetModule(compMgr, fileSpec) {
return XPCOMUtils.generateModule(components);
}
(哈哈,一个包含多个接口的组件完成了。)
相关文章推荐
- JS编写函数实现对身份证号码最后一位的验证功能
- js编写当天简单日历效果【实现代码】
- 编写js扩展方法实现判断一个数组中是否包含某个元素
- 编写一个JS函数,实现清除数据中重复的元素
- 教你编写 Node.js 中间件,实现服务端缓存(附demo源码)
- 在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
- 编写js扩展方法实现判断一个数组中是否包含某个元素
- 编写js公共函数addclass()实现改变样式
- 使用subline实现vue文件的高亮显示以及html和js的快速编写
- 教你编写 Node.js 中间件,实现服务端缓存(附demo源码)
- Node.js编写组件的三种实现方式
- js编写当天简单日历效果【实现代码】
- 如何使用 require.js ,实现js文件的异步加载,避免网页失去响应,管理模块之间的依赖性,便于代码的编写和维护。
- python实例编写(4)--js,滚动条,cookie,验证码,获取特定属性的元素,实现原理
- websocket实现QQ聊天一之二(UI js编写)
- UIBootatrap:是由AngularJS UI团队编写的纯AngularJS实现的Bootstrap组件
- 在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
- JS编写一个函数,实现传入一个不定长度字符串,查找出重复次数前n名的字符并分别统计其次数
- JS实现返回页面顶部