- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
XPCOM指南-4_创建组件的代码
创建组件的代码
本章会讲述一些基本代码,这些代码用于处理你的组件与XPCOM之间的关系。 如何发现和注册组件是本指南的第一节的目标。在后续的章节里,我们就可以专注WebLock本生的功能开发了。
为了创建组件库并把它加载进XPCOM,你需要编写大量的代码。 一个XPCOM组件至少需要实现XPCOM必须的3个接口,而且往往还要其它的接口。 这一章你将会看到更多的代码,然而这些并不是整个WebLock组件代码。“Using XPCOM Utilities to Make Things Easier”展示了更加简单,更加优雅的方式创建XPCOM组件(使用泛型和宏),这一章的目的是为了学习基础知识,因为这对你深入了解XPCOM是很有帮助的。
1. WebLock组件用途
WebLock组件让你浏览器当前Book控件(类似于浏览器里面的一个Tab)处于一种特别模式,防止用户离开当前的域或者一个安全域集合。 一旦开启此功能,此“weblock”模式受密码保护,将一直持续到密码持有人关闭此功能。 他可以用于实现家长对儿童访问域名的控制,这样儿童访问的内容就被限制到了特定的域名上。 Web Lock User Interface 显示图标,用来激活web lock 模式(在左下角的状态栏),一旦你安装了weblock组件,图标就在那儿了,不离不弃。
Web Lock User Interface
WebLock组件的大多数实际工作是有组件本身代码实现的,例如,发现需要使用的XPCOM接口,和把功能挂接到Gecko浏览器。
2. Component Registration
所有的XPCOM组件,无论存储在哪儿(共享库,Javascript文件,或者其它样式),在使用他们提供的功能之前,都需要注册。 注册是一个过程,发生在 XPCOM 的所有应用程序,无论他们是嵌入式的Gecko客户端、 Mozilla、 Netscape 7、 Compuserve 或使用 XPCOM 的任何其他软件。注册为应用程序提供了所需组件的正确使用信息。
WebLock组件为了注册,需要做大量的事情。 本章已经包含了组件库的组件相关接口实现:nsIModule和nsIFactory接口,这是你实现的代码的入口点。 一旦你的组件实现了这些接口,剩下的注册过程本身就很简单了。 应用程序通常使用regxpcom注册,这会在下一节描述。
2.1 regxpcom 程序
你可以通过regxpcom程序显示的注册组件。 不带任何参数启动regxpcom时,程序默认在注册表中注册该组件。我们建议当您在 Mozilla 或 Netscape 客户端来测试您的组件时,您应该把你的组件复制到客户端的安装文件夹中的组件目录。 当它复制时那里时,从命令行运行regxpcom,就会注册在该目录中的所有组件。
在regxpcom 1.4及后面版本后增加了一些新的选项,你可以通过-h参数查看详细信息。
2.2另外的注册方式
基于Gecko的嵌入式应用程序,提供了另外一种方式注册XPCOM组件。 XPInstall,这是Mozilla用于安装浏览器和其它组件的跨平台安装技术,这是另外的一种注册方式。 这个会在以后的“Packaging WebLock”章节进行描述。 对于你想扩展的应用,你也可以问问他的作者是否还支持其它方式。
3. WebLock Module 源代码概述
正如我们在前面章节所提及的,组件是分层的。 每一个XPCOM组件主要由三层组成。 从内到外,第一层是XPCOM对象。 这个对象包含了业务逻辑,实现业务功能,例如,启动一个网络下载,实现下载进程的监听,或者提供一个新类型的处理功能。 在WebLock,这一层与多个Gecko服务协同工作,防止用户访问可接受域名清单里的域名。 另外的工厂和模块层这负责把XPCOM对象插入大的XPCOM系统。
在XPCOM对象层之上的是nsIFactory对象。 这个对象提供了XPCOM对象的基本抽象。 正如你在文章“Onion Peel View of XPCOM Component Creation,”你所看到的那样,它通过CreateInstance与XPCOM对象进行交互,这个函数将会根据你提供的CID和IID返回相应的对象。
再往外一层就是nsIModule层。 这个接口又提供了nsIFactory对象的进一步抽象,并可能允许多个nsIFactory对象。 本接口的关键在于getClassObject的返回类型不必非是nsIFactory。 nsIModule 可以请求XPCOM对象实现细节。 这非常有用,如果调用方需要知道像其线程模型,是不是单例,实现语言,等等。 在这种情况下,使用的接口是 nsIClassInfo。从外向内开始,“O
文档评论(0)