岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

「JP ISBN Linker」を公開した

ISBN文字列をダブルクリックするとAmazon.co.jpの該当書籍ページが開くグリモン「JP ISBN Linker」を公開しました。

初めは、以前書いたグリモン「bk1 - Add Amazon Link」(bk1の書籍詳細ページにAmazonへのリンクを追加する)のまずい点を直そうと思っていたのですが、動作ページをbk1に限定する必要がないことに気づき、現在の形に収まっています。結局「bk1 - Add Amazon Link」は、obsoleteとしました。

ちょっとだけ技術的な話

Piroさんが超絶便利アドオン「テキストリンク」の資料で書かれている:

今のバージョンでは、選択範囲の含まれているテキストノードだけが検索対象になるので、URI文字列の一部だけが強調されているといった場合などに「ユーザーの目に見えている」URI文字列を正しく取得できません。

XUL Apps > Documentations > テキストリンクの紹介 - outsider reflex

という問題に、私も同じくぶち当たりました。Piroさんはとっくに解決されているので、テキストリンクのコードを参考にすれば早いのでしょうが、こういう課題を自力で解くのが好きという因果な性格なので、数日かけて(えー)ロジックを考えた次第です。

具体的には、window.getSelection().getRangeAt(0)をじわじわ広げていき、選択箇所付近のISBNっぽい文字列を特定させています。また広げる際には、前後のテキストノードにポインタを移すよう考慮しました。どんなもんでしょうかね。

追記(2010-02-16)

実際に使ってみるとダブルクリックすら面倒だったので、マウスによる範囲選択時にも発動するようにしてみました(onmouseupで捕捉)。私は快適です。