Hatena::Groupmoz-addon

hogezilla RSSフィード

当ページに書かれているコードは、修正BSDライセンスのもと、再頒布して頂いて構いません。

2013-12-02

JavaScriptコードモジュール内で console や Promsie を使う

21:46 | はてなブックマーク - JavaScriptコードモジュール内で console や Promsie を使う - hogezilla

JavaScript コードモジュール内では DOM が存在しない。

普通のJavaScriptに慣れてしまうと、console オブジェクトがなかったり、Promsie がなかったり、setTimeout がなかったりでちょいと面倒な思いをする。

ってことで、ダーティな気がするけど、無理やり使えるようにしちゃおう。

Components.utils.import("resource://gre/modules/Services.jsm");
const { console, Promise, setTimeout } = Services.appShell.hiddenDOMWindow;

console.group("Test");
console.dir(this);
(new Promise(function (r) {
  setTimeout(function() {
    if (typeof r === "function") {
      r("OK");
      return;
    }
    r.resolve("OK (old Promise)");
  }, 500);
}).then(function(msg) {
  console.log("Promise: " + msg);
});
console.groupEnd();

Services.appShell(nsIAppShellService)には、hiddenDOMWindowという、名前の通り隠されたDOMWindowオブジェクトを持っている。当然、DOMを持っていたりするので、ここから console 等を取ってきてしまおうという作戦。

console オブジェクトの各メソッドから出るログは、従来のJavaScriptコンソールだと出てこないが、最近のFirefoxにあるブラウザコンソールなら出てくる。(Thunderbird アドオンでのロギング時には注意が必要かも)

トラックバック - http://moz-addon.g.hatena.ne.jp/teramako/20131202