Now browsing the archives for 1月, 2011.
ウィンドウがアクティブ(最前面に表示されている)かどうかの判定方法
あるウィンドウが Firefox 以外のアプリケーションのウィンドウも含めた中で最前面に表示されているかどうかを判定する方法。
Firefox 3.6 の場合
最前面に表示されたウィンドウにはXULドキュメントのルート要素に active
属性(値は “true”)が自動的に付加される (参考:nsGlobalWindow.cpp)。
var isActive = document.documentElement.hasAttribute("active");
ちなみに、最初これを教わったときに最前面にあるブラウザウィンドウを DOM Inspector で一生懸命調べたものの active 属性なんてものは無かったが、その場合最前面のウィンドウは DOM Inspector になるので、無くて当然である。
Firefox 4.0 の場合
なぜか active
属性を付加する仕組みが削除されたようなので、代替としてCSSの -moz-window-inactive
擬似クラスを利用する。
例えばブラウザウィンドウ (browser.xul) であれば、以下のようにして調べることが可能。
var isActive = !document.querySelector("#main-window:-moz-window-inactive");
他の方法として、window に対する focus, blur イベントを監視して自分でフラグを上げ下げする方法もある。