ほかのアドオンと名前がかぶらないように、オブジェクトにまとめるときの注意点です。
var helloworld = { Branch : Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService) .getBranch("extensions.helloworld."), messageGet : function() { var msg = this.Branch.getCharPref("message");// "extensions.helloworld.message"(文字列型)の取得 this.show(msg); }, messageSet : function() { var msg = prompt("メッセージの入力"); this.Branch.setCharPref("message", msg);// "extensions.helloworld.message"(文字列型)の設定 }, show : function(aMsg) {//引数は先頭にaをつける alert(aMsg); } };
なお、上のBranchの部分を以下のように変えることはできません。
Prefs : Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService),
Branch : this.Prefs.getBranch("extensions.helloworld."),//this.PrefsでPrefsを読むことができない。
メンバ変数を最初に動的に設定したい場合、次のようにする手があります。
// ウインドウを開いたときhelloworld.init()を実行するようにイベントリスナーをセット window.addEventListener("load", function() {helloworld.init()}, false); var helloworld = { init : function() { this.Prefs = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService); this.Branch = this.Prefs.getBranch("extensions.helloworld."); }, messageGet : function() { var msg = this.Branch.getCharPref("message");// "extensions.helloworld.message"(文字列型)の取得 this.show(msg); }, messageSet : function() { var msg = prompt("メッセージの入力"); this.Branch.setCharPref("message", msg);// "extensions.helloworld.message"(文字列型)の設定 }, show : function(aMsg) {//引数は先頭にaをつける alert(aMsg); } };
そのほか、単純に毎回Branchをセットしたり、下のようにBranchを生成するための関数を作って、使いたいときはそれを呼び出すという手もあります(多分これが一番安全)。
getBranch : function(){ var Prefs = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService); var Branch = Prefs.getBranch("extensions.helloworld."); return Branch; }
他、XUL部品のidなども他とかぶらない名前をつけておいた方がいいでしょう。
thisはふつう自オブジェクトを指しますが、イベントから呼び出された場合などはそのイベントを起こしたオブジェクトを指します。
//Firefox起動時にtest.initを実行するように設定。 window.addEventListener("load", function() { test.init(); }, false); var test = { variable:"variable", init : function() { //ページをロードしたときにonPageLoadを実行するように設定 var appcontent = document.getElementById("appcontent"); // browser if(appcontent) appcontent.addEventListener("DOMContentLoaded", test.onPageLoad, true); }, onPageLoad : function(aEvent) { alert(this.variable);//undefinedと表示される。 alert(test.variable);//正しく表示される。 } }
アドオン開発のためのアドオンをもう一度見て機能を確認しておきましょう。
アドオン開発についての情報はMozilla Developer Centerにありますが、日本語版は不完全なことがあるので、そういうときは右上のLanguageから英語ページに移動します。
「○○がしたい」と思ったときそのコードを見つける方法です。
Code snippetsなど、便利なサイトをリンクにまとめてあります。
上の方法で見つからなかった場合、手っ取り早いのは自分がやりたいことと同じことをやっているアドオンを見つけてそのソースをコピーすることです。Chrome Listを入れてれば、「ツール」-「Explore Chrome...」メニューからインストールされているアドオンのソースを見ることができます。また、一部のアドオンは、ログインすればダウンロードページからソースを見ることができます。
ほとんどのアドオンはMPLやGPLなどのライセンスの下にあり、自由にコピーできます(その代わり、コピーして作ったアドオンもそのライセンス下に入る)。詳細はこちら。
細かい注意点をいくつかこちらにまとめてあります。