「サイドバー」の編集履歴(バックアップ)一覧はこちら
「サイドバー」(2011/03/31 (木) 09:56:26) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
#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"で行われていて、見えないだけで実際にはサイドバーが呼び込まれている。見えないのに処理だけ行われているというのはまったくの無駄だし、さらに予想外のエラーが発生することも多々ある。(例えば、XULのstringbundleのメソッドを使用しようとするとエラーが出る...なんでだ?)
この対策として、強制非表示になる状況では処理を中断するというコード↓。もっと良い方法ないかなぁ...
#highlight(javascript){
let win = window.top.document.querySelector('window[chromehidden~="extrachrome"]');
if (win) return;}
#contents()
*サイドバーを作成
-[[Creating a Firefox sidebar - MDC Doc Center>https://developer.mozilla.org/en/Creating_a_Firefox_sidebar]]
chrome.manifest
#highlight(manifest){
content sample content/
overlay chrome://browser/content/browser.xul chrome://sample/content/browser.xul}
browser.xul
#highlight(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(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(javascript){
var sidebarBox = document.getElementById("sidebar-box");
var visible = !sidebarBox.hidden;}
*サイドバーのブラウザオブジェクト (xul:browser) を取得
#highlight(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"で行われていて、見えないだけで実際にはサイドバーが呼び込まれている。見えないのに処理だけ行われているというのはまったくの無駄だし、さらに予想外のエラーが発生することも多々ある。(例えば、XULのstringbundleのメソッドを使用しようとするとエラーが出る...なんでだ?)
この対策として、強制非表示になる状況では処理を中断するというコード↓。もっと良い方法ないかなぁ...
#highlight(javascript){
let win = window.top.document.querySelector('window[chromehidden~="extrachrome"]');
if (win) return;}