faviconize ver. 0.40

favicon の表示方法をちょっと変えてみた。というより変えざるを得なかったんだけど結果的にうまくいった。ところどころ表示されないのはそのサイトの管理者半分、おれ半分の責任なんだけど実際のところなんで表示されないのかわからないので時間かかりそう。あと Yahoo 検索に対応した。

http://www012.upp.so-net.ne.jp/legio/distribute/faviconize.user.js

使い方

インストールすると対応したページで favicon が表示されるようになります。現在以下のページに対応してます。

技術的なハナシ

SITEINFO を考え直してみた。けっこう柔軟にしたつもりなんだけどどうかな ?

  • name
    • 名前。人間が読みやすいように設けているだけでこれを使って何かしてるわけではない。
  • applyURL
    • 適用する URL 。単に url って書くと後述の urlNode と間違えそうなのでこういう名前に。
  • urlNode
    • favicon を表示したい URL を含むノードの XPath expression 。より厳密に言うと href 属性かテキストとして URL を含む要素。まぁソース読めばわかるんだけど urlNode に指定された XPath で抽出されたノードの nodeValue か textContent を URL とみなすので上のこういう風にした。わからん場合それっぽい a 要素の href 属性を指定しとけば大体おk。
  • insertPosition
    • favicon を挿入する際の基準になるノードの XPath expression 。
  • after
    • 真偽値。 insertPosition で指定したノードの後ろに挿入するかどうか。デフォルト false で前に挿入する。

以下は実際の例。

    {
        name:           'google search',
        applyURL:       '^http://www\.google\.co\.jp/search',
        urlNode:        './/ol/li/h3/a[@href]/@href',
        insertPosition: './/ol/li/h3/a[@href]',
        after:          false,
    },
    {
        name:           'Yahoo!検索',
        applyURL:       '^http://search\.yahoo\.co\.jp/',
        urlNode:        './/div[contains(concat(" ",@class," "), " sinf ")]/em',
        insertPosition: './/h3/a[@href][contains(concat(" ",@class," "), " yschttl ")]',
        after:          false,
    },

Yahoo みたいな変態的なサイトの場合でもこれでちゃんと記述できるのでけっこう表現力はあるんじゃないかと思う。ということでそろそろ wedata に間借りする方向。