ユーザースクリプトをアンインストールするかどうか確認するように書き換える方法

途中まで書いた記事が失われる事故を未然に防ぐ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を終了させてから始めて下さい。

  1. まずはgreasemonkey.jarを探す。
  2. vistaの場合大体ここ C:\Users\username\AppData\Roaming\Mozilla\Firefox\Profiles\tekitou.default\extensions\{e4a8a97b-f2ed-450b-b12d-ee082ba24781}\chrome
  3. macは知りません。コマンドでやるのが通常なのかな?ググってください。
  4. greasemonkey.jarはzip圧縮されてるので適当な解凍ソフトを使って解凍する。chromeFilesとiconsというフォルダが出てくる。
  5. 次にmanage.jsというファイルを探します。解凍してでてきたchromeFiles\contentにあります。
  6. manage.jsを適当なエディタ(TeraPadとか)で開いてください。メモ帳だと行番号から追えない。
  7. 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じゃなくても読み込めるもんなのか。不思議だ。