Hatena::Groupmoz-addon

hogezilla RSSフィード

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

 | 

2011-06-15

Panoramaのセッションデータ

| はてなブックマーク - Panoramaのセッションデータ - hogezilla

拡張機能などからタブグループへのアクセス方法はFirefox4のタブグループとタブで書いた。

今度は、タブグループ、またの名をパノラマのセッションデータについてである。

タブグループにもセッションデータがあり、ビューのボックスの位置やグループIDやそのタイトル、タブのURLなどが保存されている。単にデータを読みたいだけであれば、ビューを読み込まずともセッションから取れば良いこともある(現行値が保存されているかどうかはタイミングによると思うので微妙かもしれないが)。その読み取り方法を記そう。

まあぶっちゃけコードを読むのが一番かもしれない。

nsISessionStore

セッションデータ用のXPCOMサービスを呼び出す。

const SessionStore = Cc["@mozilla.org/browser/sessoinstore;1"].getService(Ci.nsISessionStore);

インターフェースはこちら

get

データを得るには以下のメソッドを使用する。

グループのデータ
getWindowValue(aWindow, aKey)メソッド
タブのデータ
getTabValue(aTab, aKey)メソッド

どちらも、返り値は文字列で、今回の場合はJSONデータとなっている。つまり、var data = JSON.parse(SessionStore.getWindowValue(window, aKey))とすればオブジェクトを得られるわけだ。

引数aWindowaTabには以下を。

aWindow
FirefoxのWindowオブジェクト
aTab
xul:tab要素

aKeyについて、

使用メソッドaKey説明
getWindowValue"tabview-groups"グループ管理用のデータ。
グループを新規作成した場合にデフォルトで付けられるIDと、現在アクティブなグループのIDが収められている
getWindowValue"tabview-group"各グループのデータ。
グループIDやタイトル、ビューのボックス位置、大きさが収められている
getTabValue"tabview-tab"各タブのデータ。
属するグループのIDやタブのタイトル、URL、ビューのボックス位置などが収められている。
ビュー管理外のピン留めされたタブのデータは存在されないことに注意
getWindowValue"tabview-ui"パノラマビューの位置や大きさ。基本的には使用しないでしょう
set

データをセーブするにはgetとほぼ逆のことをすれば良い

グループのデータ
setWindowValue(aWindow, aKey, JSON文字列)メソッド
タブのデータ
setTabValue(aWindow, aKey, JSON文字列)メソッド

グループ管理のデータを得る

Firefoxのウィンドウにある、タブグループ管理用のデータを得るには

SessionStore.getWindowValue(window, "tabview-groups")を使用する。

const SessionStore = Cc["@mozilla.org/browser/sessoinstore;1"].getService(Ci.nsISessionStore);
var data = JSON.parse(SessionStore.getWindowValue(window, "tabview-groups"));
// {
//   "nextID": 36,
//   "activeGroupId": 6
// }
keydesc
nextID新たなグループを作った際に割り当てられるグループのID
activeGroupIdセッション保存時にアクティブだったグループのID

まあ正直面白いデータは取れないw

グループのデータを得る

SessionStore.getWindowValue(window, "tabview-group")を使用する。

const SessionStore = Cc["@mozilla.org/browser/sessoinstore;1"].getService(Ci.nsISessionStore);
var data = JSON.parse(SessionStore.getWindowValue(window, "tabview-group"));
// {
//   "2": {
//     "bounds": {
//       "height": 185,
//       "left": 879,
//       "top": 88,
//       "width": 221
//     },
//     "id": 2,
//     "title": "group 1",
//     "userSize": null
//   },
//   "13": {
//     "bounds": {
//       "height": 161,
//       "left": 15,
//       "top": 219,
//       "width": 233 
//     },
//     "id": 13,
//     "title": "group 2",
//     "userSize": null
//   }
// }

配列で収まっていると思いきや単なるオブジェクトである。グループのIDは必ずしもインクリメンタルにあるわけではなく、グループが削除されたりすると欠番になる。配列で管理しないのはそのためだろう。

トップのプロパティ名はグループIDで、それぞれのidと一致する(プロパティ名は文字列だけど)はず。コードを見る限りIDは数値である必要はなく、文字列に変えても良さそう(自信ないけど)。拡張機能で固有のIDを付けて特別な管理とかすると面白いかも。

keydesc
boundsビューを開いたときのグループアイテムの位置や大きさ
idグループのID。親のプロパティ名と一致するはず
titleグループ名
userSizeよく分からんw

タブのデータを得る

SessionStore.getTabValue(aTab, "tabview-tab")を使用する。

const SessionStore = Cc["@mozilla.org/browser/sessoinstore;1"].getService(Ci.nsISessionStore);

var tabs = gBrowser.tabs;
for (var i = 0, tab; (tab = tabs[i]); ++i) {
  var data = JSON.parse(SessionStore.getTabValue(tab, "tabview-tab"));
  // {
  //   "bounds": {
  //     "height": 84,
  //     "left": 738,
  //     "top": 429,
  //     "width": 92
  //   },
  //   "groupID": 2,
  //   "title": null,
  //   "url": "http://....",
  //   "userSize": null
  // }
}
keydesc
boundsビューを開いたときのタブアイテムの位置や大きさ
groupID属するグループのID
titleセッション保存時(?)のタブのタイトル
urlセッション保存時(?)のコンテンツのURL
userSizeよく分からんw

値は必ずしも現行値を表しているわけではないので、titlenullだったり、urlabout:blankだったりする。

groupIDは属するグループのIDである。この値を書き換えて保存してやると、セッションの復元時には別のグループに属するようになる。

JayceeJaycee2011/08/07 13:22This info is the cat's pajmaas!

mzaztnucpgmzaztnucpg2011/08/07 20:47sZ4yx0 <a href="http://vjyalczqhabg.com/">vjyalczqhabg</a>

kepuqjtzhrlkepuqjtzhrl2011/08/10 23:47CUnJvv <a href="http://sldmrheskakw.com/">sldmrheskakw</a>

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