世の中にはアドレス中の大文字小文字を区別するサーバも少なくないわけなんだけれども、 multi_requester.js がリンク先のURLを小文字に変換してしまっているためそう言ったサーバの大文字を含むアドレスに飛飛ぶことができない。
まあ multi_requester.js は結果が見れれば満足な場合が多いので普通はそう困ることはない。
ところで、私は .vimperatorrc に以下の設定を書いて delicious 内のブックマークを multi_requester から開いている。
javascript <<EOM liberator.globalVariables.multi_requester_siteinfo = [ { name: "delicious-mybookmark", description: "delicious searching my bookmarks", url: "http://delicious.com/search?p=%s&u=" + delicious_username + "&chk=&context=userposts&fr=del_icio_us&lc=1", xpath: 'id("context-bookmarklist")//div[@class="data"]//*[@class="taggedlink" or @class="description"]', }, ]; EOM
つまり何が言いたいかと言うと、multi_requester.js で任意のアドレスに飛ぶ機会が多い。
飛べないアドレスに当たる度にイライラしていたので、修正を試みた。
ソースを辿ると、どうやら以下の箇所が原因。
_libly.js 328 行目付近
xmlSerialize: function(xml) { try { return (new XMLSerializer()).serializeToString(xml) .replace(/<!--(?:[^-]|-(?!->))*-->/g, '') .replace(/<[^>]+>/g, function(all) all.toLowerCase()); } catch (e) { return '' } },
タグの中身を一括で小文字に変換している。この時に URL も一緒に小文字になってる。
この処理の真に意味するところはわからないが、serializeToString() の出力を見た感じだとタグ名が大文字になってるので、タグ名のみを小文字にするように修正してみた。
xmlSerialize: function(xml) { try { return (new XMLSerializer()).serializeToString(xml) .replace(/<!--(?:[^-]|-(?!->))*-->/g, '') .replace(/<\s*\/?\s*\w+/g, function(all) all.toLowerCase()); } catch (e) { return '' } },
とりあえずこれでちゃんと動くようになった。
けど、これライブラリだし、他のどこから呼び出してるかわからないし、修正方法もこれでいいかよくわからない。まあ問題が起こったらその時考えることにする。