ユーザースクリプトをアンインストールするかどうか確認するように書き換える方法
途中まで書いた記事が失われる事故を未然に防ぐgreasemonkeyのなかでgreasemonkeyのスクリプトをアンインストールするときに確認をだしてほしいと要望しておいて、自分でやってみたところ成功したので公開メモ。
手順説明
追記
以下にあるmanage.jsの場所は古い情報です。バージョン0.8.20090123.1はC:\Users\ユーザ名\AppData\Roaming\Mozilla\Firefox\Profiles\プロファイル名\extensions\{e4a8a97b-f2ed-450b-b12d-ee082ba24781}\chrome\chromeFiles\contentにあります。
ファイルを編集する際は適宜バックアップしたほうがいいです。
firefoxを終了させてから始めて下さい。
- まずはgreasemonkey.jarを探す。
- vistaの場合大体ここ C:\Users\username\AppData\Roaming\Mozilla\Firefox\Profiles\tekitou.default\extensions\{e4a8a97b-f2ed-450b-b12d-ee082ba24781}\chrome
- macは知りません。コマンドでやるのが通常なのかな?ググってください。
- greasemonkey.jarはzip圧縮されてるので適当な解凍ソフトを使って解凍する。chromeFilesとiconsというフォルダが出てくる。
- 次にmanage.jsというファイルを探します。解凍してでてきたchromeFiles\contentにあります。
- manage.jsを適当なエディタ(TeraPadとか)で開いてください。メモ帳だと行番号から追えない。
- 112行にあるhandleUninstallButton関数を編集します。
function handleUninstallButton() { if( !confirm('remove this script?') ) { return false; } // <-これを書き加える。 var uninstallPrefs = document.getElementById("chkUninstallPrefs").checked; config.uninstall(selectedScript, uninstallPrefs); }
8. 上のようにコードを書き加えたら上書き保存して、再びzip圧縮してください。(chromeFilesとiconsフォルダをひとつにzip圧縮。圧縮率は気にしなくてもよさそう。)
9. 以上で終了です。一応念のために、新規にスクリプトを作ってアンインストールボタンを押すと確認画面がでるか実験してみてください。
ど素人がどうやってこの方法を見つけたか
初心者(自分を含めて)向けに、どうやってこの方法を発見したのかメモ
- 編集すべきgreasemonkey.jarは適当に見つけられた。
- 拡張子jarは実はzip圧縮ということはどっかでみた。
- 以前のバージョンでユーザスクリプト管理画面の改良(manage.cssを編集して大きめに表示するだけ)をやったことがあった。
- 解凍したファイルを適当に見てたら、manage.jsがあったので見てみる。
- とりあえずuninstで検索してみる。
- 35行目がヒット。単純にcase "uninstall":の下にalert('aaaa!')とか仕込んで、圧縮してアンインストールボタンをおしてアラートが表示されるのを確認する。
- ツボはココか!と早合点する。
- 同じところにif( !confirm('remove this script?') ) { return break; }を仕込んでみる。
- アンインストールボタンを押すとconfirmが表示され、キャンセルを押すとスクリプトが消されてない!成功!と小躍りする。
- 実は表示が消えないようになっただけで、実際はアンインストールされていることに気づく。
- もう一回uninstで検索。btnUninstallという変数に気づく。
- btnはボタンの略か!とひらめく。
- btnUninstallがaddEventListenerでhandleUninstallButton関数を仕込まれていることに気づく。
- case "uninstall":とhandleUninstallButton関数にアラートを仕込んでどっちが先に反応するかいちいち確認する。
こんな感じ。
感想
アドオンに手を加える作業をはじめてやったんだけど、zipで再圧縮するところが気になる。圧縮率0じゃなくても読み込めるもんなのか。不思議だ。