Using components

This is an archived page. It's not actively maintained.

XPConnect works transparently in Mozilla and xpcshell to give you access to XPCOM components.

Commonly, we start our scripts like so:

var Cc = Components.classes;
var Ci = Components.interfaces;

If we want to get a hold of a component, we then do something like:

var rc = Cc["@mozilla.org/registry;1"];
var rs = rc.getService(Ci.nsIRegistry);

See also:

  • xpcshell -- how to get a command line interface to JavaScript

More Info

As was already stated, it is common to start addon scripts like:

var Cc = Components.classes;
var Ci = Components.interfaces;

There is also another way to start, which is exactly equivalent to the above.

var {Cc: classes, Ci: interfaces} = Components;

There are many more than just classes and interfaces.

var {
    Cu: utils,
    Ci: interfaces,
    Cc: classes,
    Cr: results,
    Cs: stack,
    Cm: manager,
    Ce: Exception,
} = Components;

Here is a full breakdown of what is contained in Components. Any of the below can be accessed by Components.BLAH (IE: Components.isSuccessCode)

utils=[object nsXPCComponents_Utils]
interfaces=[object nsXPCComponents_Interfaces]
classes=[object nsXPCComponents_Classes]
results=[object nsXPCComponents_Results]
isSuccessCode=function isSuccessCode() {
[native code]
}
Constructor=[object nsXPCComponents_Constructor]
QueryInterface=function QueryInterface() {
[native code]
}
interfacesByID=[object nsXPCComponents_InterfacesByID]
classesByID=[object nsXPCComponents_ClassesByID]
stack=JS frame :: Scratchpad/4 :: cDump :: line 8
manager=[xpconnect wrapped nsIComponentManager]
ID=[object nsXPCComponents_ID]
Exception=[object nsXPCComponents_Exception]
reportError=function reportError() {
[native code]
}
canCreateWrapper=function canCreateWrapper() {
[native code]
}
canCallMethod=function canCallMethod() {
[native code]
}
canGetProperty=function canGetProperty() {
[native code]
}
canSetProperty=function canSetProperty() {
[native code]
}