30分で作るJetpack Feature (1) 概要
日記を全然更新してなかったので会社で作った資料をまるっとコピー
長い資料なので2つに分けた
はじめに:Tutorialの方が詳しいです
何も考えないで使いながら覚えていきましょう
- とりあえずインストール
- about:jetpackをアドレスバーに入力すると色々見れる
- WelcomeのDemoをインストールしてみる
- Tutorialをいじる
- API Referenceをちょっと見る
options = { title: 小窓のタイトル body: 小窓の本文 icon: 小窓につけるアイコンのURL(httpとかchrome) }
-
-
- jetpack.slideBar
- タブの横にスライドサイドバーができる(Firefox3.5じゃないと見れないかな?)
- 実験的な機能なので初めに以下の宣言が必要
- jetpack.slideBar
-
jetpack.future.import("slideBar");
-
-
-
- jetpack.slideBar.append(options)で設定
-
-
options = { icon: slidebarを開いた時に出すアイコン url: 表示するページのURL(slidebarにiframeを表示するイメージ?)相対pathの場合はjetpack featureのjsが置いてある場所からのpath(e.g. https://jetpack.mozillalabs.com/demos/unad.jsをインストールしている場合、unad.htmlと書けばhttps://jetpack.mozillalabs.com/demos/unad.htmlが読み込まれる) html: 表示するHTML。urlと一緒に書いたらこっちが優先される width: slidebarの幅 onSelect: slidebarに出ているアイコンをクリックしたときに実行される関数。$(slide.icon).clickと同じかな? onReady: slidebarを読み込んだ時に実行される関数 }
-
-
-
- onSelect,onReadyのコールバック関数で受け取った引数(わかりやすいようにslideとする)を使い、slide(options)でslidebarを操作することもできる
-
-
options = { size:スライドさせたときの幅 persist:trueならユーザが閉じるクリックしない限り閉じない } ※optionsなしでslide()を実行するとslidebarが閉じられる
options = { url: 表示するページのURL。slidebarと逆でhtmlと一緒に書いたらこっちが優先される html: 表示するHTML。 width: slidebarの幅 onReady: slidebarを読み込んだ時に実行される関数 }
jetpack.future.import("storage.simple");
-
-
-
-
-
- 非同期でデータを取得するようなので、getしたデータを使いたい場合はコールバック関数の中に書く必要がありそう
-
-
-
-
var value = 0; jetpack.storage.simple.set('storageData', 1); jetpack.storage.simple.get('storageData', function(data, value) { console.log(data); // storageData console.log(value); // 1:保存したデータ // 以降valueを使った処理 }); // ここではvalueがまだgetできていない可能性がある console.log(value); // 0:まだgetできていないため
-
-
- jetpack.tabs
- 現在開いてるタブ一覧のオブジェクト(配列のようになっている)
- jetpack.tabs
-
最初のタブ:jetpack.tabs[ 0 ] 最後のタブ:jetpack.tabs[ jetpack.tabs.length-1 ]
-
-
-
- 現在見ているページはfocusedでとれる
-
-
console.log(jetpack.tabs.focused.url); // 現在見ているページのURL console.log(jetpack.tabs.focused.close()) // 現在見ているタブを閉じる console.log(jetpack.tabs.focused.favicon) // 現在見ているタブのfavicon console.log(jetpack.tabs.focused.contentDocument) // 現在見ているタブのwindowオブジェクト(alert使ったり) console.log(jetpack.tabs.focused.contentWindow) // 現在見ているタブのdocumentオブジェクト
-
-
-
- タブを選択した時に実行させたいならonFocus()、DOMを読み込んだ時に実行させたいならonReady()
-
- onReadyはiframeを読み込んだ時にも実行され、その時にコールバック関数で受け取る引数はiframeのオブジェクト
-
- タブを選択した時に実行させたいならonFocus()、DOMを読み込んだ時に実行させたいならonReady()
-
-
jetpack.tabs.onReady(function onNextPage(doc) { if (!doc.defaultView.frameElement) { // このif文がないとiframeを読み込んだタイミングでも以下が実行される jetpack.notifications.show("Loaded " + doc.location.href); } });
-
- location
- jetpack featureをインストールするために使われたpath。普通はhttp://example.com/insatall_jetpack.htmlみたいなやつ
- location
- Demoに戻ってソースを見てみる
- Installed Featuresのview source
- これを参考に実際に作ってみる
- Installed Featuresのview source
一から作ろうとせずに既にあるソースからインスパイア
- 次の日記に中身書いた
発表の時間が余ったら以下も触れる
- 作ったjetpack(例えばmonmon.js)をインストールさせたいときは以下のlinkタグをheadに入れたページを作ればいい
<link rel="jetpack" href="monmon.js" name="monmonのJetpackFeature"/>
- Bespin
- これ使っても開発できるよ
- https://bespin.mozilla.com/
- 色々できすぎてセキュリティ少しやばい
- http://d.hatena.ne.jp/teramako/20090522/p1
- http://d.hatena.ne.jp/teramako/20090526/p2
- 訳)APIがまだ全然なくて穴開けてないと楽しいことできなかったら今は穴開けちゃってるけどそのうち塞ぐよ
- Jetpackのロードマップとか
- その他(ハマりどころとか)
onReady: function(doc) { console.log(doc.defaultView.window); // windowオブジェクト console.log(doc.defaultView.wrappedJSObject); // HTMLに書かれたJavaScriptの関数が使える console.log(doc.defaultView.wrappedJSObject.exampleFn()); // HTMLに書かれたexampleFnという関数を実行 }
jetpack.json.encode is deprecated, please use JSON.stringify instead. jetpack.json.decode is deprecated, please use JSON.parse instead. var obj = { nifty: 'ニフティ' } var json = JSON.stringify(obj); console.log(json); // {"nifty":"ニフティ"} console.log(JSON.parse(json));
-
-
- 実験機能、新機能みたいなのをプロパティに持っている
-
["jetpack.T1000", "jetpack.os.clipboard", "jetpack.securableModules", "jetpack.slideBar", "jetpack.storage.simple"] jetpack.future.import("T1000"); jetpack.notifications.show(jetpack.T1000()); jetpack.future.import("os.clipboard") jetpack.os.clipboard.set('ニフティ'); jetpack.notifications.show(JSON.stringify(jetpack.os.clipboard.get()));