サイドバーを作成
chrome.manifest
content sample content/
overlay chrome://browser/content/browser.xul chrome://sample/content/browser.xul
browser.xul
<?xml version="1.0"?>
<overlay id="sampleBrowserOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<menupopup id="viewSidebarMenu">
<menuitem observes="viewSampleSidebar" />
</menupopup>
<keyset id="mainKeyset">
<key id="key_openSampleSidebar" command="viewSampleSidebar"
key="S" modifiers="alt" />
</keyset>
<broadcasterset id="mainBroadcasterSet">
<broadcaster id="viewSampleSidebar" label="sampleSidebar"
key="key_openSampleSidebar"
autoCheck="false"
type="checkbox" group="sidebar"
sidebarurl="chrome://sample/content/sidebar.xul"
sidebartitle="sample sidebar"
oncommand="toggleSidebar('viewSampleSidebar');" />
</broadcasterset>
</overlay>
sidebar.xul
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/skin/browser.css" type="text/css" ?>
<page id="sampleSidebar" title="sample sidebar"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="Application.console.log('sample sidebar onload');">
</page>
サイドバーを表示する/非表示にする
toggleSidebar(broadcasterId);
サイドバーの現在の表示状態(表示されているか非表示か)を取得
var sidebarBox = document.getElementById("sidebar-box");
var visible = !sidebarBox.hidden;
サイドバーのブラウザオブジェクト (xul:browser) を取得
var sidebar = document.getElementById("sidebar");
基本。
サイドバーに表示中のURLを取得
sidebar.getAttribute("src");
sidebar.currentURI.spec;
sidebar.srcは駄目だよ。
サイドバー非表示時に前回サイドバーに表示していたURLを取得
sidebarBox.getAttribute("src");
サイドバーを表示しているときは、sidebar.getAttribute("src") == sidebarBox.getAttribute("src") になります。
サイドバー内のドキュメントにアクセスする
sidebar.contentWindow
sidebar.contentDocument
サイドバー内からトップのブラウザウィンドウにアクセスする
window.top
window.top.gBrowser
features指定をして開いた新しいWindowにおけるサイドバーのエラー
window.openなどでfeaturesを指定して新しいウィンドウを開く場合、強制的にサイドバーが非表示になる場合がある。しかしこの"非表示"はCSSの"display:none"で行われていて、見えないだけで実際にはサイドバーが呼び込まれている。見えないのに処理だけ行われているというのはまったくの無駄だし、さらに予想外のエラーが発生することも多々ある。(例えば、XULのstringbundleのメソッドを使用しようとするとエラーが出る...なんでだ?)
この対策として、強制非表示になる状況では処理を中断するというコード↓。もっと良い方法ないかなぁ...
let win = window.top.document.querySelector('window[chromehidden~="extrachrome"]');
if (win) return;
最終更新:2011年03月31日 09:56