Link要素系bookmarklets


誰かが言及済みだろうが、bookmarkletにkeywordをつけると、まるでコマンドラインユーザーインターフェイスのようだ。というかCUI。「%s」を活用すると、インタラクティブbookmarkletを作れる。
おお、そんなことが。ということで自分も試しに書いてみた。

javascript:(function(){
    var linktype = RegExp("(^|\\s)".concat("%s", "(\\s|$)"), "i"), linkElem = document.getElementsByTagName("link");
    for(var i = 0, len = linkElem.length;i < len; i++){
        var rel = linkElem[i].getAttribute("rel").toString();
        var rel = String(linkElem[i].getAttribute("rel"));
        if(linktype.test(rel)){
            location.href = linkElem[i].getAttribute("href");
            break;
        }
    };
})();

これをキーワードmoveで登録して、アドレスバーにmove prevと入力すれば、rel="prev"のhyper reference先へ移動できる (そういうlink要素があれば)。
本当に試しに書いてみたという品質なので (って言うか、全くdebugしていないので < しろよ) 不具合が色々出そうな気がするが、木俣自身が使う分には既に満足した。
丁寧に作り込めば (たとえば該当linkが複数ある場合、複数の新規tabで開くとか、alternateの場合、alternate stylesheetは除外するとか) Link要素系の拡張機能要らずになれそう。

案の定bugった

rel属性もってないlink要素があるとnull.toString();となりbugった。ので、修正。
場当たり的に直した副作用として、rel属性を持たないlink要素をnullで検索できるようになりました (が、rel="null" (なんだそりゃ) と区別がつきません)。