ウィンドウメディエータは開いているウィンドウを監視する Mozilla コンポーネントです。 nsIWindowMediator
インターフェイスを通じてアクセスできます。 nsIWindowMediator
の最も一般的な二つの用途は次のようなものです。
- 最前面にある (most recent)、もしくは任意の、指定された型のウィンドウを取得する。
- 指定された型の全てのウィンドウを列挙する。
下記の例で、type
は検索したいウィンドウの型を示しています。ウィンドウに型を指定するには、<
や window
><
のようなトップレベルの要素に dialog
>
属性を付加します。windowtype
ブラウザウィンドウは navigator:browser
というウィンドウの型を持っています。ウィンドウの型に関わらず全てのウィンドウを検索するには、空文字列 ""
を渡して下さい。
最前面にあるウィンドウを取得する
次のコードは、指定した型のウィンドウのいずれかを取得したい時や、ある型のウィンドウ (例えばあなたの拡張機能の設定ダイアログ) がすでに開かれているかどうかを調べたい時に役立ちます。
getMostRecentWindow
は、 ChromeWindow
オブジェクト、もしくは指定された型のウィンドウが開かれていなければ、 null
を返します。
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); var win = wm.getMostRecentWindow(type);
ウィンドウを列挙する
次のコードは、特定の型の開かれているウィンドウのそれぞれに何かをしなければならない時に使えます。例えば、設定ダイアログの "OK" ハンドラで、開かれているブラウザウィンドウのそれぞれに新しい設定を適用する時などです。
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); var enumerator = wm.getEnumerator(type); while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); // |win| は [Object ChromeWindow] である(|window| と同等)。これに何かをする }
このコードでは特定の型のウィンドウ全てに対して反復処理を行っており、type で指定するのはウィンドウの型です。例えば、全てのブラウザウィンドウを列挙したければ、"navigator:browser" を指定します。型に関わらず全てのウィンドウを列挙したければ、null
を指定します。
nsIWindowMediator
のリファレンスページでは、 getMostRecentWindow
の戻り値の型と、列挙された要素の型は、 nsIDOMWindow
/nsIDOMWindowInternal
とされています。実際には、JavaScript のコードから呼ばれる時には、これらのメソッドは普通 (常に?) ChromeWindow
オブジェクトを返し、これは上記の両方と他の幾つかのインターフェイスを実装しています。あなたが恐らく慣れ親しんでいるであろう、グローバルオブジェクトの window
は ChromeWindow
型です。
参考
Interwiki Languages Links