サイドバーブックマークのスクロール位置を記憶するuserChromeスクリプト

なにこれ

Firefox3系はサイドバーブックマークを一度閉じるとスクロールした位置を忘れる。これをなんとかする。

このスクリプトを動作させるにはFirefoxアドオンの「userChrome.js」とサイドバーに対応している「Alice0775さんのSub-Script Loader」が必須です。
userChrome.jsのインストール方法はこちら 超簡単にuserChrome.jsのインストールを説明する - Cherenkovの暗中模索にっき

// ==UserScript==
// @name           remember sidebar scroll position
// @namespace      http://d.hatena.ne.jp/Cherenkov/
// @description    http://d.hatena.ne.jp/Cherenkov/20090616/p1
// @include        chrome://browser/content/bookmarks/bookmarksPanel.xul
// ==/UserScript==

(function(){
  var gPrefService = Components.classes[
        "@mozilla.org/preferences-service;1"].
            getService( Components.interfaces.nsIPrefBranch);
  document.getElementById("bookmarks-view-children").addEventListener("scroll", function() {
    var getRow = document.getElementById("bookmarks-view").boxObject.getFirstVisibleRow();
    gPrefService.setIntPref("userChrome.bookmarksPanel.rowPosition", getRow);
  },false);

  var pos = gPrefService.getIntPref("userChrome.bookmarksPanel.rowPosition");
  document.getElementById("bookmarks-view").boxObject.scrollToRow(pos);
})();

使い方

userChrome.jsとAlice0775さんのSub-Script Loaderをインストールしてから、ダウンロードしたrememberSidebarScrollPosition.uc.jsをuserChrome.jsと同じ場所(プロファイルのchromeフォルダ)に置く。

解説

ブックマークサイドバーをスクロールするたびに「設定システム」(about:configのやつ)にスクロールした後の最初の行の値を保存している。サイドバーを開くたびにbookmarksPanel.xulがロードされuc.jsが実行されスクロールされる。

感想

  • 最初browser.xulsidebar開閉のwatchポイントをつくってbookmarksPanel.xulと連携しようとしたけど失敗。次にbroadcasterで出来るか調べたけどよくわからない。じっと考えてこれになった。
  • userChromeJS 1.1でも問題ない。サブスクリプトローダは必要。
  • All-in-One Sidebarは使わない。