2013年4月16日火曜日

Vimperatorプラグイン nextlink.js が動かないので調べた

2013.05.06 続編あり(とりあえず動くようにした)。 
 nextlink.jsとは何か
nextlink.jsは、AutoPagerize風のページ継ぎ足しを手動で実行することができるVimperatorプラグイン(だった)。
Googleの検索結果などの複数ページに跨るコンテンツを表示した状態で、キーボードより ]] と入力すると、1ページ目の下に2ページ目が継ぎ足される。さらに]]と入力すると、下に3ページ目が継ぎ足される(はずであった)。

括弧内に過去形で書いたのは、久しぶりに使ってみたらちゃんと動かなかったからである。2ページ目は取れるが、3ページ目以降が取れない。
ちょっと調べてみたところ、なんとなく原因が判明。
いま彼に何が起きているのか
nextlink.jsの仕様はこうだ。
]]を入力すると、現在のページ内からXPathを使って次ページへのリンク(アンカー)を取得し、AjaxでそのURLのコンテンツ(次ページ)を取ってくる、という動きをする。この辺の処理には、_libly.js というライブラリに含まれる関数を使っている。
ところが、試しに_libly.jsにGoogle検索結果の2ページ目を取得させてみたところ、次ページへのリンク部分が
<a class="pn" id="pnnext>
となっていた。うん、href属性がない。そんなばかな。これでは3ページ目のURLが分からない。

調べてみたところ、現在の_libly.jsには問題があり、Ajaxの関数 libly.Request#get で取得したHTML文書から<a>のhref属性を取ることができない状態のようである。

この辺の話が下記に出ている。
_libly.jsのcreateHTMLDocumentに使っているnsIScriptableUnescapeHTMLのバグ - Vimple Star Sprites - vimperatorグループ
XPCOMのバグ? ということで、Vimple Star Spritesの中の人である寺田さんがバグ報告している。
bug 6538 ? nsIScriptableUnescapeHTML#parseFragmentでアンカー要素のhref属性値が空になる
が、ほんの少し議論された後、放置されているようである(日付は、なんと2009年3月)。文面を読む限り、仕様だってことなんかな…。
困ったもんだが、直すなら
  • _libly.js のHTMLパース処理を書き直す
  • nextlink.js 側で個別に対応する
のどちらかになる。
前者は影響範囲が大きすぎて俺みたいな雑魚には辛いので、後者の方向で少し対策を考えてみたい。暇があれば。

0 コメント:

コメントを投稿