Starting with Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6), you can easily add new APIs to the window.navigator
object by using the Category Manager. Add an entry to the "JavaScript-navigator-property" category.
The object must be implemented as an XPCOM component. Each method below of adding new objects to the navigator object requires that the new object is a registered XPCOM component. You can read about creating and registering XPCOM components in JavaScript.
var categoryManager = Components.classes["@mozilla.org/categorymanager;1"] .getService(Components.interfaces.nsICategoryManager); categoryManager.addCategoryEntry("JavaScript-navigator-property", "myApi", MY_CONTRACT_ID, false, true);
This adds a new object, myApi
, to the window.navigator
object. The newly added object is a reference to the component specified by the contract ID MY_CONTRACT_ID
. You can learn more about Contract IDs are unique text identifiers for XPCOM components.
You can also add an object to the window.navigator
object by using the chrome manifest of an add-on:
component {ffffffff-ffff-ffff-ffff-ffffffffffff} MyComponent.js contract @mozilla.org/mycomponent;1 {ffffffff-ffff-ffff-ffff-ffffffffffff} category JavaScript-navigator-property myComponent @mozilla.org/mycomponent;1
Generate a GUID and replace the "ffff" sections in both the component and contract lines with your GUID.
This adds a new API, myComponent
, to the navigator object, which you can then access as navigator.myComponent
.
You can see an example of how this is used in Firefox by taking a look at how the mozApps
API is implemented: