Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2008-05-01謎は全て解けたが既にd:id:kazuhookuの通った道

Sidebarのtoggle対象にオレオレxulを指定する

| 19:54 |  Sidebarのtoggle対象にオレオレxulを指定する - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  Sidebarのtoggle対象にオレオレxulを指定する - Ci.nsIZIGOROu

Firefoxサイドバーですが、toggleSidebar()と言う関数にて、切り替えを行う事が出来ます。

toggleSidebar('viewBookmarksSidebar');

この辺りの事は、Sidebar - Mozilla | MDNに詳しく書いています。

sidebar自体のwindowオブジェクトは簡単に取得出来て、

var sidebarWindow = document.getElementById("sidebar").contentWindow;

で取れます。sidebarWindow.location.href で実際の表示をオレオレxulに切り替える、、、で終了なんだけどここまではさっきのMDCのドキュメントに書いてある通り。

で、今回は何が言いたいかと言えば、toggleSidebar()の第一引数です。これなんだよwww

で早速ソース見てみよう。

toggleSidebar() のソースコード

function toggleSidebar(commandID, forceOpen) {

  var sidebarBox = document.getElementById("sidebar-box");
  if (!commandID)
    commandID = sidebarBox.getAttribute("sidebarcommand");

  var sidebarBroadcaster = document.getElementById(commandID);

broadcaster って何だろうと思ったら XUL TutorialBroadcasters and Observers で説明されている broadcaster要素でした。

broadecaster要素の説明はMDCに譲るとして、簡単にかいつまんで言えばxul属性値を保管する為の要素で、broadcaster要素をobserveすると、値をそのまま引き継ぐ事が出来たりします。

でtoggleSidebar()関数はこのbroadcaster要素のid名を第一引数に取り、対応するbroadcaster要素の属性値からSidebarタイトル変更したり、実際に表示するコンテンツURLを取得したりをやってるようです。*1

ちなみにこのtoggleSidebar()関数でtoggle出来るようにしたいならば、overlayで、

<broadcasterset id="mainBroadcasterSet">
  <broadcaster
    id="viewBookmarksSidebar"
    autoCheck="false" label="ブックマーク"
    type="checkbox"
    group="sidebar"
    sidebarurl="chrome://browser/content/bookmarks/bookmarksPanel.xul" oncommand="toggleSidebar('viewBookmarksSidebar');
  "/>
  <!-- 以下略 -->
</broadcasterset> 

のように指定する感じです。

なるほどねー。

*1:どうも純粋に値の保管用途で使っているみたいで、observers指定してないっぽぃ

LennaLenna2011/08/08 03:40This website makes tnhgis hella easy.

xndviznyuxndviznyu2011/08/09 03:55GQGzvz <a href="http://agjlmyyhirbd.com/">agjlmyyhirbd</a>

njydwgnjydwg2011/08/09 21:57DASY3e , [url=http://namibcrrpmuh.com/]namibcrrpmuh[/url], [link=http://msrwuvgwdgzr.com/]msrwuvgwdgzr[/link], http://tnzezkwwuxhh.com/

nepvnlitcgnepvnlitcg2011/08/11 00:50Migv43 <a href="http://yktlgtadiclc.com/">yktlgtadiclc</a>

ptfcidmkbuwptfcidmkbuw2011/08/15 01:26zu8N8N , [url=http://hdsuokliwwbx.com/]hdsuokliwwbx[/url], [link=http://oyhswchuwlmi.com/]oyhswchuwlmi[/link], http://ybiryyvqumxj.com/