Email: Takayama Fumihiko <tekezo@pqrs.org>

XUL メモ

XUL メモ

タブブラウザのタブについて

  • window は全タブで共有。 (= グローバル変数は window のプロパティなので全タブで共有される)。
  • browser は全タブで共有。(getBrowser() の返り値)
  • browser.contentDocument はタブ毎に所有。 (ただし、ページ毎の所有になり、ページ遷移でリセット)
  • browser.contentWindow はタブ毎に所有。 (ただし、ページ毎の所有になり、ページ遷移でリセット)
ページ遷移を行っても継承されるような値をタブ毎に持つのは無理?

以下のようなスクリプトを実行すると最初は "undefined"、二回目以降は "true" が表示されるが、 ページの遷移を行うと "undefined" に戻る。
alert(getBrowser().contentWindow.moge);
getBrowser().contentWindow.moge = true;
ページの遷移をしてから「戻る」と getBrowser().contentWindow.moge の内容は "true" となる。 (= 内容が保持されている)。

タブ一覧を取得

for (var i = 0; i < getBrowser().browsers.length; ++i) {
    alert(getBrowser().browsers[i].contentDocument.title);
}
browser.browsers にタブ一覧があるので、それらを見る。

オーバーレイについて

overlay を行うためには id でオーバーレイ先の要素を指定しないと無視されてしまう。

ところが、以下の pageInfo.xul の <keyset> みたいに id が存在しないところをオーバーレイしたい場合もある。 どうするか。

<window id="main-window" ...>
  <keyset>
    <key key="&closeWindow.key;" modifiers="accel" command="cmd_close"/>
    <key keycode="VK_ESCAPE"                       command="cmd_close"/>
    <key keycode="VK_F1"                           command="cmd_help"/>
    <key key="&copy.key;"        modifiers="accel" command="cmd_copy"/>
    <key key="&selectall.key;"   modifiers="accel" command="cmd_selectall"/>
    <key key="&selectall.key;"   modifiers="alt"   command="cmd_selectall"/>
  </keyset>
</window>

これについては上位エレメントの id を指定してあげる。

<overlay ...>
  <window id="main-window">
    <keyset>
      <key id="f4kc_NextTab" oncommand="f4kc_NextTab();" key="]" />
      <key id="f4kc_PrevTab" oncommand="f4kc_PrevTab();" key="[" />
    </keyset>
  </window>
</overlay>

XUL からキーイベントを擬似的に発生させる方法

例えば Ctrl + PageUp を発生させる。

var keyevent = document.createEvent("KeyEvents");
keyevent.initKeyEvent("keypress", false, true, document.defaultView,
                      true, false, false, false, KeyEvent.DOM_VK_PAGE_UP, null);
document.dispatchEvent(keyevent);

F6 とか Tab はうまく動かない? Event Bubbling あたりの関係?

Mac OS X と onKeyDown について

Mac OS X については Ctrl とか Alt とか Shift とかの modifiers については onKeyDown イベントが発生しない。
(Ctrl + クリックで右クリックになったりするから?)

それが原因で Mac OS X では modifiers のみからなるショートカットがおそらく作成不能。


Comments for This Page.
Date: 2005-12-24 00:00 (JST)