日向夏特殊応援部隊

俺様向けメモ

mozIJSSubScriptLoaderを使って現在の実行コンテキストに外部ファイルを読み込ませる

まぁこれ、識者の間ではどうも当たり前の模様です。

mozIJSSubScriptLoaderを使う

var loader = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader);
loader.loadSubScript(url, ctx);

とするとctxオブジェクトにwithした状態と同等で外部のソースを引っ張る事が出来ます。
ctxを省略すると、現在のコンテキストになります。

サンプル

/home/zigorou/Foo.jsなどに、

var Foo = function() {};
Foo.prototype = {
  name: function() { alert("ZIGOROu"); }
};

/home/zigorou/FooSubScript.jsなどに

function url() {
  alert("http://d.hatena.ne.jp/ZIGOROu/");
}

などとして、

loader.loadSubScript("file:///home/zigorou/Foo.js");
loader.loadSubScript("file:///home/zigorou/FooSubScript.js", Foo.prototype);

なんてやるとprototype拡張を行う事が出来ます。Foo.prototype.toSource()などで確認してみて下さい。prototypeにurlと言うfunctionが追加されているはずです。

何がメリットか

  • XPCOMをJSで作る際のデバッグのしやすさ(単発で記述して単発でテストとか出来そう)
  • ファイルの肥大化を防ぐ

とかですかね。