Livedoor Readerに「ここまで読んだ」機能を付加するGreasemonkeyスクリプト

Livedoor Readerで使えるGreasemonkeyスクリプトを作りました。
LDR Bookmarkのインストールはこちらから↓
http://userscripts.org/scripts/source/59942.user.js

概要

Livedoor Readerでフィードごとに「ここまで読んだ」を記憶しておくことができる。

主な用途

未読件数が200のフィードを開くのは気合を要する作業です。
なぜなら、開くからには一度に全部読み切ってしまわねばと思ってしまうからです。
このスクリプトを使うと、そんなプレッシャーが軽減され、気軽にフィードを開くことができるようになります。
特に、更新はあまり頻繁ではないものの、記事一件ごとの内容が多い、重厚なタイプのフィードと相性が良いです。

使い方

インストールすると、Livedoor Readerのヘッダ部分にメニューアイコンと、各記事にしおり登録ボタンが付加されます。
フィードの閲覧中に、登録ボタンをクリックすると、現在読んでいる記事の位置を記憶(しおり)しておくことができます。


また、しおりした記事から閲覧を再開したいときは、メニューから目的のフィードを選択することで、その記事までジャンプすることができます。


しおりはフィードごとに個別に記憶しておくことができ、一つのフィードにつき一箇所だけ登録できます。
つまり、既にしおりが登録されたフィードの閲覧中に再び登録ボタンをクリックすると、以前のしおりは消去され、現在読んでいる記事が新たにしおりされます。しおり付きのフィードを開いている間は、メニューアイコンの背景色が緑色になりますので、うっかりしおりを差し替えてしまうことの防止に役立ちます。

しおりを消去するには、しおりされた(背景色が緑色の)記事を表示した状態でもう一度登録ボタンをクリックしてください。そうすれば、そのフィードに対して登録されたしおりを消去することができます。
あるいは、メニューから「全消去」を選択することで、全てのフィードに登録されたしおりを一斉に消去することができます。
なお、ホットキーはありません。

既知の不具合

非常に更新頻度の高いフィードや、古い記事の修正に伴う更新などにより記事の並び順が変更された直後のフィードなどに対してしおりを開こうとした際に、正確に該当記事までジャンプできないことがあります。この場合、記事の順序関係が不確かな状態で表示してしまう可能性があるため、対象のフィードを開かないようにしています。
逆に、該当記事が表示された場合は問題が生じなかったということなので、安心して読み進めて頂いて大丈夫です。
といっても、実際のところほとんどのフィードでこの現象は起こりません。

なお、不具合が発生した場合でも、どの記事をしおりしたかという情報自体は正しく記憶できているため、手動で辿り着いて頂くことは可能です。メッセージ欄に該当記事の大体の場所が表示されますので、そのあたりを探してみてください。該当記事の背景色が緑色になっているため、見つけやすくなっています。

不具合の原因について

正直に言ってよくわかりませんでした。不具合が起こりやすいフィードの例としては、はてブの「最近の人気エントリー」なんかがあります。LDRサーバ側のことは全くわからないため、不具合の理由もよくわからないのですが、気づいたことを報告します。
LDRではXMLHttpRequestを使ってサーバに記事をよこすようにリクエストを出すときに、対象フィード中のどこからどこまでの範囲の記事をダウンロードするかを指定するようになってます。このとき、範囲の開始インデックスや件数を色々と変えて試行してみると、レスポンスの中身に一貫性が無いような振る舞いを見せる場合がありました。一貫性が無いというのは、範囲指定の仕方によっては、レスポンスの中身の記事の順番が入れ替わっていたり、歯抜けになっていたりするということです。
このことについては、もう少し詳しい話を、後日別エントリで報告したいと思います。