Now browsing the archives for 2月, 2011.
xul:prefwindow の設定ダイアログにヘルプボタンを表示する
Firefox 本体の「オプション」ダイアログのように、 xul:prefwindow
要素で作った設定ダイアログに、「ヘルプ」ボタンを表示したい。
xul:prefwindow の buttons 属性?
xul:prefwindow
要素の buttons
属性の説明を読むと、表示したいボタンをカンマ区切りで指定する、と書いてあるので以下のようにしてみた。しかし、OKボタン・キャンセルボタンは表示されるものの、ヘルプボタンは表示されなかった。
<prefwindow buttons="accpet,cancel,help">
ちなみに、 xul:dialog
要素のダイアログであれば、上記方法でもヘルプボタンが表示される。
xul:prefpane の helpURI 属性?
xul:prefpane
要素の helpURI
属性の説明を読むと、設定用パネルに関連付けられた URI を指定する、と書いてあるので以下のようにしてみた。しかし、依然としてヘルプボタンは表示されなった。
<prefpane helpURI="http://www.example.com/">
xul:prefpane の helpTopic 属性!
MDC のドキュメントには説明が無いが、以下のように各設定パネル(xul:prefpane
要素)に helpTopic
属性を指定することで、ようやくヘルプボタンの表示が可能となった。なお、 helpTopic
の値は各設定パネルを識別可能な文字列を適当に入れておけばよい。
<prefpane helpTopic="general">
別解
別解として、スクリプトを使って動的にヘルプボタンを見えるようにする方式もある。
<prefwindow onload="document.documentElement.getButton('help').hidden = false;">
余談
設定ダイアログに一切のボタンを表示させたくない場合、 xul:prefwindow
要素の buttons
属性にカンマ一文字を指定する。
<prefwindow buttons=",">
ヘルプボタンクリック時の動作
次に、ヘルプボタンをクリックして、特定のURLをブラウザで開くようにする。
ヘルプボタンクリック時の動作は xul:prefwindow
要素の ondialoghelp
属性に指定する。
<prefwindow ondialoghelp="openHelpURI();">
URLをブラウザで開く際、設定ダイアログがモーダル(instantApply が false)の場合は新しいウィンドウで、モードレス(instantApply が true)の場合は新しいタブで開きたい。そこで、 chrome://browser/content/utilityOverlay.js
を読み込んでおくと色々面倒なことを解決してくれる openUILinkIn
というユーティリティ関数が使えるようになる。ただし Firefox のアドオン限定。
<script type="application/x-javascript" src="chrome://browser/content/utilityOverlay.js" />
<script type="application/x-javascript"><![CDATA[
function openHelpURI() {
var where = document.documentElement.instantApply ? "tab" : "window";
openUILinkIn("http://www.example.com/", where);
}
]]></script>