ffos (gecko):如何在gecko 中编写XPCOM组件(一)--javascript 实现方式
ffos (gecko):如何在gecko 中编写XPCOM组件(二)--C++ 实现方式
xpcom refference links XPCM相关
摘要
XPCOM是gecko中很核心的技术,本文尝试在gecko中添加两个简单XPCOM组件,展示XPCOM的基本开发示例,为后续工作提供一些参考。
1. XPCOM 技术
1.1 XPCOM是什么
XPCOM 的目标是使软件的不同部分分别开发, 相互独立. 为了是应用的不同组件之间能够互操作, XPCOM 把组件的实现与接口(后面讨论接口)分开. 同时 XPCOM 还提供了加载和操纵这些组件的库和工具以及服务, 以帮助开发人员编写跨平台的代码和组件版本管理; 因此组件可以在不破坏应用或者重新生成应用的同时被替换被更新. 通过使用 XPCOM, 开发人员创建的组件可以在不同的应用中被重用, 或者替换当前应用中的组件以改变应用的功能.
XPCOM 不只提供组件软件开发的支持, 它同时提供一个开发平台的大多数功能的支持:
组件管理
文件抽象
对象消息传递
内存管理
可以把 XPCOM 想象成一个 组件开发平台, 它提供了上面的这些特性。
Gecko 中应用地很核心技术,相当与microsoft 的COM技术(又是借鉴),用的很广,按我的理解,用于扩展gecko 本身,用js或实现的往上可提供webidl接口的实现文件来调用,往下则可以对更下层的进行封装。
1.2 XPCOM架构
Gecko 与XPCOM的关系可以简单粗暴理解成,gecko=一堆XPCOM组件。
2. XPCOM 组件开发
下面介绍gecko下XPCOM 组件的写法框架 。
2.1 javascript实现方式
涉及到的目录及文件及其作用原理:
2.1.1 js组件编写
1.js 组件最终目录结构:
gecko/dom/simplejs/
simplejs ├── moz.build ├── nsISimplejs.idl ├── nsIUseComponent.idl ├── Simplejs.js ├── Simplejs.manifest ├── UseComponent.js └── UseComponent.manifest
|
2.组件实现:
(1)nsISimplejs.idl 接口定义文件
#include "nsISupports.idl" [scriptable, uuid(ce32e3ff-36f8-425f-94be-d85b26e634ee)] interface nsISimpleComponent : nsISupports { attribute string yourName; void write(); void changejs(in string aValue); };
|
(2)Simplejs.jsnsISimplejs.idl的实现文件
"use strict";
const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; const Cr = Components.results;
Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm");
function SimpleComponentImpl() { debug("yahaha,constructor SimpleComponentImpl constructor in simplecomponent.js################"); }
//dump("yahaha,dump,im SimpleComponentImpl in simplecomponent.js######################### before prototype");
SimpleComponentImpl.prototype = {
contractID : "@mozilla.org/simplejs;1", classID: Components.ID("{cc587afa-0696-469f-9eff-9dac0dd727fe}"), QueryInterface: XPCOMUtils.generateQI([Ci.nsISimpleComponent]),
|