目次を表示するgreasemonkeyスクリプト

本を読むときはまず目次から読む。
Webサイトだって1ページにギッシリ詰まっているページには目次がほしい。
たとえばこんなページとか。
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
というわけで作ってみた。
こんな感じ。右側に表示されてるのが目次。

【機能】
h1からh6タグを抜き出して列挙します。
クリックすると該当位置へジャンプします。
【トリガー】
画面上でダブルクリック
【表示位置】
画面右上
【目次を非表示にする方法】
目次の[x]をクリックするか画面上でダブルクリック。
ダブルクリックで表示/非表示をトグルします。
【既知のバグ】
バグというか、いやだなーと思ってることも交えつつ。

リンクされない場合がある
よくわからないけど、どうやらh1とかのタグの中に<a name="xxx"></a>みたいなのがあるとリンクにならない模様。-->直した。たぶん大丈夫。
目次が上から順番に並んでいない
探索方法が深さ優先じゃなくて幅優先なので、全h1要素、全h2要素、全h3・・・という並び順になっています(ダメじゃん)。HTMLを上から順番にパースしていけばいいんだろうけど、やりかたがよくわからないしめんどくさそう。今はgetElementsByTagNameでガシっと取ってきてるだけ。
目次を表示したくなくてもダブルクリックすると表示されてしまう
まー、しょうがないんだけどさ。右ダブルクリックのイベントないかなーとか思って調べたんだけどよくわかんなかった。
下の画面と重なると読みにくい
positionをabsoluteにして画面右上に配置しているのでもともとの画面と重なる。少し透明にしてるので読めないってことはないんだけど。まー、これもしょうがないか。2回ダブルクリックして非表示/表示をすればいいということで。

【前提条件】
Firefoxgreasemonkeyが入っていること。
mozdev.org - greasemonkey: index
【インストール方法】
http://takatoshi.dyndns.org/js/showtoc.user.js
リンクをクリックしてスクリプトを表示すると画面上部になんか出る(はず)なので「Install」をクリックする。
それだけ。
うまく動かない場合は[ツール]-[Manage User Scripts...]でshowtocを選択。右側の「Include pages」に何も表示されてなかったら「Add」をクリックしてアスタリスク(*)を入力してOK。

    • -

【参考】
mozdev.org - greasemonkey: authoring