This article needs a technical review. How you can help.
Unstable
Using sdk XPCOM
With the low-level module sdk/platform/xpcom , it's possible to exclude chrome and XPCOMUtils in some cases.
Below is an example for the XPCOM bookmark observer.
Examples
Bookmarks Observer
Normally, a bookmark observer would require Chrome Components and XPCOMUtils as described in the following links:
However, with the sdk module , we can remove this need.
Below is an example, where we extend the xpcom module's Unknown class with an nsINavBookmarkObserverinterface and one of its optional interface methods (onItemchanged). We can then create an object from it and add it as an observer to the bookmarks service.
// This removes the need to import Ci and the XPCOMUtils const { Class } = require("sdk/core/heritage"); const { Unknown } = require('sdk/platform/xpcom'); const { PlacesUtils } = require("resource://gre/modules/PlacesUtils.jsm"); let bmListener = Class({ extends: Unknown, interfaces: [ "nsINavBookmarkObserver" ], //This event most often handles all events onItemChanged: function(bId, prop, an, nV, lM, type, parentId, aGUID, aParentGUID) { console.log("onItemChanged", "bId: "+bId, "property: "+prop, "isAnno: "+an, "new value: "+nV, "lastMod: "+lM, "type: "+type, "parentId:"+parentId, "aGUID:"+aGUID);0 // Code to handle the event here } }); //We just have a class, but need an object. Notice the small l var bmlistener = bmListener(); PlacesUtils.bookmarks.addObserver(bmlistener, false);