This is a book about Gecko, and about creating XPCOM components for Gecko-based applications. Though the emphasis is on the practical steps you take to make your C++ code into a component that can be used in Gecko, we hope that these steps will also give us an occasion to discuss all of the tools, techniques, and technologies that make up XPCOM. Accordingly, the book is arranged so that you can follow along and create your own components or learn about different XPCOM topics individually, as in a reference work. For example, the introduction includes a discussion of components and what they are, and the first chapter-in which you compile the basic code and register it with Mozilla-prompts a discussion of the relationship between components and modules, of XPCOM interfaces, and of the registration process in general.
The top of each chapter provides a list of the major topics covered. Sidebar sections are included to highlight technical details. By the end of the book, if we've done our job, you will have leaned how to build a component and you will know something about the framework for these components in Gecko, which is XPCOM.
Creating XPCOM Components is meant for C++ developers. Though you can create XPCOM components in JavaScript and other languages, and though you might be able to follow along as a C programmer, the component implementation code is written in C++, and much of the discussion of how to make your code into an XPCOM component starts from C++. You don't need to be a C++ expert, however. Although basic ideas such as inheritance and encapsulation should be familar to you, wherever possible they are explained in the book as they are used. Also many of the examples are in JavaScript, which is used in Mozilla to access XPCOM components as scriptable objects, and so familiarity with that language is useful as well.
XPCOM stands for the Cross Platform Component Object Model. As this name implies, XPCOM is similar to Microsoft COM. If you have any experience with this technology, much of it can be applied to XPCOM. However, this book does not assume any prior knowledge of COM-all of the basic COM ideas will be introduced.
This book provides a tutorial about building an XPCOM component that controls browsing behavior. Although, XPCOM can be used in many environments which are unrelated to web browsing, XPCOM's main client is Gecko, an open source, standards compliant, embeddable web browser, where it's easiest and most practical to illustrate XPCOM's functionality. A full description of the component in this tutorial can be found in the "What We'll Be Working On" section of the tutorial.
谁应该读这本书!
创建xpcom组件主要是对c++开发人员来说的。虽然你也可以用javascript和其他的语言来创建它,或者你会用c去实现,但是组件的执行代码是用c++写的,而且很多改造你的代码以便用于xpcom组件的事情也是从c++开始的。不过你也不必成为一个c++专家。基本的概念,比如继承、封装,你应该是对它们比较熟悉了,但只要可能,这本书在提到的这些的时候都会解释一下。而且由于其中的很多例子是javascript的--他们用来在mozilla中访问作为脚本对象的xpcom组件,所以熟悉javascript也是比较有用的。
xpcom是跨平台的组建对象模型的缩写。就像他的名字所指明的一样,xpcom是跟微软的com想类似的。如果你有后者的经验,那么很多都可以直接应用到xpcom上。虽然如此,这本书没有假设你有任何的com的知识---所有的关于com的想法都会被介绍到的。
这本书提供了关于构建xpcom组件来控制浏览器行为的指南。虽然xpcom可以用在很多的与web浏览器无关的环境下,但是他的主要客户端还是是Gecko,Gecko是一个开源的、符合标准的、嵌入式web浏览器,在这个浏览器里,可以最容易、最实际的解释xpcom的功能。你可以在"What We'll Be Working On"这一部分里边找到对组件的完整的描述。
There are a couple of different ways to get XPCOM onto your machine so you can begin to create components. If you already have a Mozilla build or the source from Mozilla 1.2 or later, then you can use the XPCOM framework available there. If you don't already have the Mozilla source, then an even easier way to get and use XPCOM is to download the Gecko SDK, which is a collection of libraries and tools that features the XPCOM component framework.
Whether you compile your code in the Mozilla source tree or use the Gecko SDK, you can build your own components and which leverage components that already exist in Gecko. The WebLock component we describe in this tutorial is a practical (and, we hope, genuinely useful) addition to the browser. In order to build it, your Gecko SDK or Mozilla source tree needs to be version 1.2 or later. Releases prior to Mozilla 1.2 did not completely support XPCOM components with frozen interfaces, but changes since then have remedied this.
This book assumes you are using the SDK rather than compiling in a Mozilla source tree, though the difference between these two approaches is minimal. Details about downloading the SDK, building, and getting programmatic access to Gecko components are provided in the appendix to this book, Setting up the Gecko Platform.
The formatting conventions listed in Table 1 are used to designate specific types of information in the book and make things easier to scan. The goal is to use as few formats as possible, but to distinguish the various different types of information clearly.
Format | Description |
---|---|
bold | component names appear in bold in the text |
monospace |
code listings, interface names and members of interfaces (e.g., createInstance()) appear in monospaced font. Longer code listings appear in gray boxes. |
italic |
variables, filenames and directory names terms appear in italic. Important terms and new concepts are also italicized the first time they appear in the text. Those terms are either explained immediately after they are cited, or else the reader is referred to a section in the book where they are described in detail. References to other chapters (e.g., Getting Social: Making Instances of Your Component Available) are also italicized. |
"quoted" |
References to other sections are double-quoted (e.g. "Organization of the Tutorial"). |
本书的表示特殊类型的信息的格式都列在了下边这个table1里边,这样可以让浏览更加的容易。我们的目标是在清晰的区分各种类型的信息的前提下,尽可能的少用特殊的格式。
Table1. 这本书中用到的约定格式。
Table1. 这本书中用到的约定格式。
Format | Description |
---|---|
粗体 | 文本中的粗体表示组件的名字 |
等宽字体 |
代码列表、接口名字、接口中的成员(e.g., createInstance()) 用的是等宽字体。更长的代码列表放到灰色框里。 |
斜体 |
变量的名字,文件名字还有目录的名字都用斜体表示。重要的项和概念在地一次出现在文本中的时候也是斜体。这些项要么在他们被引用以后立即被解释,要么提示读者书中有详细解释的地方。对其他的章节的引用(e.g., Getting Social: Making Instances of Your Component Available) 也是斜体化。[3] |
双引号 |
对其他的章节的应用(例如 "Organization of the Tutorial"). |
Thanks to Peter Lubczynski, John Gaunt, Ellen Evans, and Alec Flett for technical reviews. And a special thanks to Darin Fisher for his very acute observations, close reading, and attention to detail.
我的注释:
[1]其中包含的侧边用来高亮显示技术细节。我没有搞清楚这句话说的是哪里。
[2]代码树的描述方式好像来自于代码的组织方式
[3]好像区别于下边的双引号
也许是我的理解能力有限,我总觉得原文好像表达的不是特别的好!