gotin blog

Whatever gotin wanna write

GreasemonkeyでGreasemonkey

Greasemonkeyにこんな↓ような機能があればいいのにと思っていました。
・複数のスクリプトをいっぺんにインストールできる
・日本語が入っていても大丈夫
・自動アップデート機能


ということで、そういう機能をもったGreasemonkeyライクなextensionを作っちゃえばいいんだ、
と思ったんですが、なんだか大変そうな気がしたので
Greasemonkeyスクリプトとして作ってみてしまいました。
(絶対何かが間違ってます。この考え方。)
こちら↓です。
loader.user.js

f:id:gotin:20061126225606p:image

以下使い方。

[設定画面の開き方・閉じ方]
Ctrl-m (コントロールキーを押したままmを押す)
で設定画面が表示されます。
(ツール → Greasemonkey → User Script Commands... → view script information でも可)

この画面でGreasemonkeyとほぼ同様の設定ができます。

[enable/disable設定]
設定画面左側にloader.user.jsにインストールされたスクリプトの一覧が表示されます。
スクリプトの名前の左側にチェックボックスがあります。
チェックされていればenable、されていなければdisableです。

[メタ情報表示&include/exclude設定]
スクリプトの名前をクリックすると右側にメタ情報が表示されます。
includeとexcludeの欄はGreasemonkeyと同じです。
動作させたいURLをincludeに、
動作させたくないURLをexcludeに設定します。
Greasemonkeyと同様に*をつかった表記もできます。
既に登録されているURLを編集するときは編集対象をダブルクリックしてください。
追加する場合はaddボタン、削除する場合は選択してからremoveボタンです。

[全スクリプトアンインストール機能]
残念ながらなぜかスクリプトのuninstallの機能がありません(致命的かも^^;;)。
代わりに全スクリプトをuninstallする機能はあります。
(ツール → Greasemonkey → User Script Commands... → clear script information)

[スクリプトのインストールの仕方]
設定画面の下の方にinstallとimportのボタンがついたフィールドがあります。
installのほうは、GreasemonkeyのスクリプトへのURLを入力し、
ボタンを押すと、スクリプトのインストールができます。
普段Greasemonkeyにスクリプトをインストールする代わりに、
このinstall作業をすることでloader.user.jsのほうにインストールされることになります。
もしくは、表示しているページ中の*.user.jsのリンクの前にインストール用アイコンボタンが表示されますので、そのボタンを押せばインストールできます。設定画面にはリロード後に反映されます。GMという文字が書いてあるアイコンです(なんだかセンスなさすぎなのでそのうちイイ感じのものにしたいと思います。)
アイコンはこんなの→f:id:gotin:20061126225648p:imageからこんなの→f:id:gotin:20061127100604p:imageにかえました。 です。

importのほうは、複数のスクリプトのインストールに使います。
複数のスクリプトのURLを配列として並べて記述したJSON形式へのファイルのURLを
入力し、ボタンを押すと、それらのスクリプトがいっぺんにインストールできます。

サンプルの複数スクリプトインストール用スクリプトはhttp://gomaxfire.dnsdojo.com/favicon_view.js

誠に勝手ながらデフォルトでhttp://gomaxfire.dnsdojo.com/gotin_scripts.jsが初期インポートスクリプトとして設定されています。

[自動更新機能]
loader.user.jsにインストールされたスクリプトは
1日に1回、更新されたかどうかをチェックします。
インストール元のURLにアクセスし、
versionがあがっていたら勝手に上書きインストールします。
さてversionなんてGreasemonkeyスクリプトのメタ情報に書くところはありません。
ので、勝手に@versionで書くことにしました。^^;
小数表記で書くようにしていただきたいと思います。

とはいえ、versionなんて私の思いつきで皆さんがつけてくれるわけはありませんので、
version表記がない場合はレスポンスヘッダのLast-Modifiedヘッダで更新日時を見ることにしました。
これが前よりも新しくなっていたら上書きインストールすることにしました。
Last-Modifiedヘッダを返さないものも当然ながらありまして、
この場合は残念ながら自動更新機能の対象外です。

[日本語でも大丈夫機能]
utf-8に限定ですが、日本語のスクリプトでも動きます。
気軽にalert("ほげ");とかスクリプトに書けるようになります。

          • -

TODO
・インストールをもっと簡単にできるようにする。
 例えば*.user.jsのリンクの横にインストール用のボタンをつける、など。
*.user.jsのリンクの前にインストール用アイコンボタンをつけました。
  ボタンを押せばインストールできます。設定画面にはリロード後に反映されます。
・インストールされているスクリプトを実行する際、
 いずれかのスクリプトでエラーが発生しても
 その他のスクリプトに影響がでないようにする。
 まだチェックしてないけども出る気がするので。
 →やっぱり影響が出てしまう。
  挙動が不安定なスクリプトには不向きってことで^^;;;

・スクリプトのエディット機能
 (一番簡単にできそう)
→実装しました。editボタンを押すとエディターが開きます。

      • -

既知の問題
http://userscripts.org/scripts/show/2111のスクリプトをインストールした後、
 動作しなくなる。
 clearすれば動作はするようになるものの。。
→修正しました。objectのJSON文字列化の処理がまずかった模様。
・Windows環境でCtrl-g,Ctrl-mを押そうとするとFirefoxの検索機能が働いてしまってうまく機能しない。
 →Ctrl-mだけで機能するようにしました。
・場合によってtoo much recursionが発生してしまう
 →JSON文字列化処理でのエラー。対策検討中。

      • -

追記
はてなブックマークのコメントを眺めていたら、もしかしたら勘違いされているかもしれない、と思えてきましたので追記しておきます。
このスクリプトはもともとのGreasemonkeyの管理画面をそのまま代替するものではありません。
このスクリプトで作られる環境にGreasemonkeyスクリプトをインストールし、それらを管理するものです。

なので、Grasemonkey自体にインストールされたスクリプトを自動更新するようなことはできません。
自動更新の対象は、本スクリプトによる環境にインストールされたGreasemonkeyスクリプトだけです。
念のため。