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