graphic with four colored squares

開発方法

Add-on Builder Jetpack SDK

Add-on Builder

開発に必要なもの

Hello, World!

exports.main = function() {
	console.log("Hello, World!");
};

標準モジュール

const timer = require("timer");

exports.main = function() {
  timer.setInterval(function() {
    console.log(new Date().toLocaleTimeString());
  }, 1000);
};

天気をアドオンバーに表示したい

使用するモジュール

Widget API (アドオンバーへのボタン追加)
Request API (GoogleのAPIで天気を取得)

Widget モジュールでボタン追加

const widgets = require("widget");

exports.main = function() {
  var button = widgets.Widget({
    label  : "Tenki",
    width  : 200,
    content: "<html><body>Tenki</body></html>"
  });
  widgets.add(button);
};

Request モジュールでHTTP通信

const widgets = require("widget");
const requests = require("request");

exports.main = function() {
  ...
  var req = requests.Request({
    url: "http://www.google.com/ig/api?hl=ja&weather=Tokyo",
    onComplete: function() {
      var xml = this.response.xml;
      var cond = xml.querySelector("current_conditions > condition").
                 getAttribute("data");
      button.content = "<html><body>" + cond + "</body></html>";
    }
  });
  req.get();
};

フォーク

使用するモジュール

Widget API (アドオンバーへのボタン追加)
Request API (GoogleのAPIで天気を取得)
Simple Persona API (ペルソナ風に画像を表示)

自作モジュールの追加

Simple Persona モジュール実装

const {Cc, Ci} = require("chrome");

function getBrowserWindow() {
  var svc = Cc["@mozilla.org/appshell/window-mediator;1"].
            getService(Ci.nsIWindowMediator);
  return svc.getMostRecentWindow("navigator:browser");
}

exports.setBackground = function(url) {
  var root = getBrowserWindow().document.documentElement;
  root.style.background = "url(" + url + ") white repeat left top";
  root.setAttribute("lwtheme", "true");
};

Simple Persona モジュールを使用

const widgets = require("widget");
const requests = require("request");
const simplePersona = require("simple-persona");

exports.main = function() {
  ...
    onComplete: function() {
      ...
      var icon = xml.querySelector("current_conditions > icon").
                 getAttribute("data");
      ...
      simplePersona.setBackground("http://www.google.com" + icon);
    }
  ...
};

動作確認

さらなる展望