bookmarklet with vimperator

さっき気付いたんだけど http://d.hatena.ne.jp/teramako/20081126/p1 で NoScript が bookmarklet の動作を阻害するというやつ、おれもはてなブックマークbookmarklet を新旧試してどちらも動かなかったので動かないねーとか言っちゃってた。のでここらへんはおれにも責任がある、という遅すぎるフォロー。

あとそもそも direct_bookmark.js ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/direct_bookmark.js ) と noscript.js ( http://vimperator.org/trac/attachment/ticket/1/noscript.js ) があるので vimperator 環境ではこの現象が起きないということも追記しておこう。んむ、いいわけだ。てかこういう意味では Firefox と vimperator は別物なんだなぁと思った。

で、そもそも vimper は bookmarklet を使わずに自前で ex-command 定義して済ますんじゃないかというハナシなんだけどいろいろ試してみたらそうとも言いきれないかもと思った。以下比較。

bookmarklet ex-command
提供の有無 最近の web service なら必ずといっていいほどある たまに有志が作ってる
登録の手間 :set go=m のあとマウスで drag & drop plugin directory に放り込む or vimperatorrc に書く
呼び出し 対象ページで :open から指定 ex-command をたたく
カスタマイズ 文字数や 1 行に収めないといけない制限がある 普通の javascript と同じように書ける上に chrome 特権付き
長所 自分で javascript を書く必要がないのとたぶん安全 ex-command 一発、いろいろな拡張が可能
短所 登録が面倒なのと呼び出し時の補完がやりづらい 書くのも登録もめんどくさい、 javascript の知識がないと成り立たない ( セキュリティ的な意味でも

こうしてみると bookmarklet を使うのも十分アリなんじゃないかと思う。まだ vimperator さわりはじめたとか javascript 自前で書けない・ひとの書いたものが信頼できるかわからないって状況や単純に自分で command 書くのもひとが書いたか調べるのもめんどくさいという状況でも使う価値はある。ただまぁ登録は最初に 1 回やるだけで済むんだけど呼び出し時の補完がやりづらいのはアレかもしれない。てか bookmarklet の場合 title ( Info ) の方での補完が効かないので多くなってくると致命的になるかも。

あと bookmarklet の機能を ex-command 化するというのは vimperator plugin 作りのいい学習材料になるかも。おれも最初に作ったのが google readerbookmarklet の ex-command だったし。以下がひな形だけど http://wiki.livedoor.jp/shin_yan/ でちゃんと学んだ方が速いかも。

( function () {
command.addUserCommand(
    ['name'],
    'description',
    function () {
        // javascript:foo だったら foo の部分をここに書く
        // 変換規則
        // document -> window.content.document
        // location.href -> window.content.document.location.href
    },
    {}
);
} )();