JetpackでPaste and Goを作ってみた。
Summary
OperaとかGoogleChromeにある、ロケーションバーへの貼り付けと移動を同時に行うやつをJetpack featureで実装した。
GomitaさんのuserChrome.js版「Paste And Go」と比べるとJetpackらしさが分かるかな。
How to
インストールするとロケーションバー(アドレスバー)の右クリックメニュー(コンテキストメニュー)に「Paste & Go」が追加される。
クリップボードにhttp, https, ttp, ttps, ftp, about, chrome, file, javascriptのプロトコルから始まる文字列がある場合にPaste & Goすると一発で移動する。
無ければ、その文字列でGoogle検索した場合に一番目にヒットするページに移動する。(I'm Feeling Lucky機能)
オプション設定
- コンテキストメニューに追加される位置をユーザが調整できる。初期値は5、-1にすると一番下に追加される。
- I'm Feeling Lucky機能を調整して他の検索エンジンも使える。google.comをgoogle.co.jpにするといいかも。
これらの変更は、Jetpackの設定画面(アドレスバーにabout:jetpackと入力するか、メニューのツールから開く)
about:jetpack - Installed Featuresで「Paste and Go」のsettingsをクリックすると入力フォームが現れるので値を変えれば保存される。
変更後適用するにはabout:jetpackのページを更新する必要がある。
Download
Mozilla Labs Jetpack - Paste and Go :: jetpack
既にインストールしたfeatureをアップデートする際は一旦featureをuninstallして、さらにpurgeしてから入れ直して下さい。(2010年1月4日)
Source Code
beforeShowで引数をもらってlocalNameで判定してたりするのはonメソッドがXULに対応していないため。詳しい説明はこっち、Menu#jetpack.menu.context.browser - MDC
onメソッドがXULに対応すれば、こんな感じで書けるはず。
jetpack.future.import("menu"); jetpack.future.import("clipboard"); jetpack.menu.context.browser.on("#urlbar").insertBefore({ label: "Paste & Go", command: function() { var contents = jetpack.clipboard.get(); if(/^\s*(?:http|https|ttp|ftp|about|chrome|file):\/\//.test(contents)) jetpack.tabs.focused.contentWindow.location = contents; else jetpack.tabs.focused.contentWindow.location = "http://www.google.com/search?btnI=I%27m+Feeling+Lucky&q=" + encodeURI(contents); } }, 5);