JavaScript XPCOM Overview

nanto_vi (TOYAMA Nao)

自己紹介

Enhanced Feed Preview

XPCOM

var comp = Components.classes[contractId]
                     .createInstance(iid);

XPCOM コンポーネントの作成 (1)

[scriptable, uuid(...)]
interface myIFoo : nsISupports {
  AString sayHello();
};

XPCOM コンポーネントの作成 (2)

function myFoo () {}
myFoo.prototype = {
  sayHello: function () {
    return "Hello world!";
  },
  QueryInterface: ...
};

XPCOM コンポーネントの作成 (3)

var myFooFactory = {
  createInstance: function (...) {
    ...
    return new myFoo().QueryInterface(...);
  }
};

XPCOM コンポーネントの作成 (4)

var myFooModule = {
  registerSelf: ...,
  getClassObject: function (...) {
    return myFooFactory;
  }
};

コンポーネントの置換

Components.manager
          .QueryInterface(nsIComponentRegistrar)
          .registerFactoryLocation(...);

参考資料