読者です 読者をやめる 読者になる 読者になる

kur.jp

バイオリンと自転車をこよなく愛するkurのチラシの裏。たまには技術的なことを書いたりするかも知れません。

XULからスクロールバーの位置を取得する

Firefoxの機能拡張から,ブラウザで開いているページ内におけるスクロールバーの移動量(スクロール量)を取得する方法がわからなくて,しばらく悩んでいたんだけど,色々なサイトを行ったり来たりしているうちに解決したのでメモ.

通常,JavaScriptであれば,window.ScrollYとか,window.PageYOffsetとか,document.body.ScrollTopとか,document.documentElement.scrollTopあたりの変数にアクセスすることで,スクロールバーがどれだけ移動しているか(どれだけページをスクロールしているか)を取得することができる.

ところが,XULスクリプトからこれらの変数にアクセスしても,スクロール量を取得することが出来ない.そこで,まず,documentオブジェクトに本当にアクセス出来ているのかを確認したが,どうも,documentオブジェクト自体にアクセス出来ていないみたいでした.

で,どうやったらdocumentオブジェクトにアクセスすればよいかなんですが,nsIWindowMediatorを利用することでできるみたい.具体的には下記のコードでスクロール量を取得することができます.

const windowManagerID = '@mozilla.org/appshell/window-mediator;1';
const windowManagerIF = Components.interfaces.nsIWindowMediator;
const windowManager   = Components.classes[windowManagerID].getService(windowManagerIF);
var target_window  = windowManager.getMostRecentWindow('navigator:browser');
Application.console.log("scroll value = " +  target_window.getBrowser().contentDocument.body.scrollTop);

参考サイト:

XUL Apps > Tips > 現在開いている各 XUL アプリのウィンドウを得る - outsider reflex