「サイドバー」の編集履歴(バックアップ)一覧に戻る
サイドバー」を以下のとおり復元します。
#contents()

*サイドバーを作成
-[[Creating a Firefox sidebar - MDC Doc Center>https://developer.mozilla.org/en/Creating_a_Firefox_sidebar]]
chrome.manifest
#highlight(linenumber,manifest){
content sample content/
overlay chrome://browser/content/browser.xul chrome://sample/content/browser.xul}
browser.xul
#highlight(linenumber,xml){
<?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
#highlight(linenumber,xml){
<?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>}

*サイドバーを表示/非表示する
#highlight(javascript){
toggleSidebar(broadcasterId);}

*サイドバーの現在の表示状態(表示されているか非表示か)を取得
#highlight(linenumber,javascript){
var sidebarBox = document.getElementById("sidebar-box");
var visible = !sidebarBox.hidden;}

*サイドバーのブラウザオブジェクト (xul:browser) を取得
#highlight(linenumber,javascript){
var sidebar = document.getElementById("sidebar");}
基本。

*サイドバーに表示中のURLを取得
#highlight(javascript){
sidebar.getAttribute("src");
sidebar.currentURI.spec;}
sidebar.srcは駄目だよ。

*サイドバー非表示時に前回サイドバーに表示していたURLを取得
#highlight(javascript){
sidebarBox.getAttribute("src");}
サイドバーを表示しているときは、sidebar.getAttribute("src") == sidebarBox.getAttribute("src") になります。

*サイドバー内のドキュメントにアクセスする
#highlight(javascript){
sidebar.contentWindow
sidebar.contentDocument}

*サイドバー内からトップのブラウザウィンドウにアクセスする
#highlight(javascript){
window.top
window.top.gBrowser}
[[chrome コードでウィンドウを取り扱う - MDC Doc Center>https://developer.mozilla.org/ja/Working_with_windows_in_chrome_code]]ではXPCOMを使うように書かれてるが、sidebarは type="content" 指定されていないのでXPCOMを使う必要はない。

*features指定をして開いた新しいWindowにおけるサイドバーのエラー
[[window.openなどでfeaturesを指定して新しいウィンドウを開く>新しいウィンドウを開く]]場合、強制的にサイドバーが非表示になる場合があります。しかしこの"非表示"はCSSの"display:none"で行われていて、見えないだけで実際にはサイドバーが呼び込まれている、という状況になることがあります。見えないのに処理だけ行われているというのはまったくの無駄ですし、さらにこのような特殊なWindowは通常のWindowとは違うのようで、予想外のエラーが発生することが多々あります(例えば、XULのstringbundleのメソッドを使用しようとするとエラーが出ます...なんで?)。
この対策として、強制非表示になる状況では処理を中断するというコード↓です。もっと良い方法ないかなぁ...
#highlight(javascript){
let win = window.top.document.querySelector('window[chromehidden~="extrachrome"]');
if (win) return;}

復元してよろしいですか?