Greasemonkey 0.8 の新機能を試してみたメモ

以下は http://www.example.com/foo/bar/baz.user.js からインストールしたという前提。

@resource

// @resource resourceName1 http://www.example.com/resource1.png
// @resource resourceName2 resource2.js
// @resource resourceName3 /resource3.css

スクリプトと同じディレクトリに2つ目のキーで指定したリソースが保存される。resourceName2はhttp://www.example.com/foo/bar/resource2.js、resourceName3はhttp://www.example.com/resource3.css。
resourceNameはユニークでなければならず、JavaScriptやXML/CSSの命名規則に沿ったものにすべき。まぁわざわざ変な名前は付けないですよね。エラーとか出なかったけど。
リソースの保存はuserscriptをインストールした時のみ行われるので後から新しいキーを追加したらアンインストールしてから再インストールが必要。
2つ目のキーに使用できるスキームはhttp(s)とftp。

GM_getResourceURL、GM_getResourceText

@resourceで保存したリソースを使う。GM_getResourceURL('resourceName1')でresource1.pngをbase64でエンコードしたもの。GM_getResourceText('resourceName2')でresource2.jsの中身。

@require

// @require foo.js
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js

@resourceとほぼ同じ。違いは中身を取り出さなくても定義された関数等が使える点。2行目だとjQueryが保存されて使えるように。

finalUrl

 GM_xmlhttpRequest({
   method:"GET",
   url:"http://www.greasespot.net/",
   headers:{
     "User-Agent":"Mozilla/5.0",            // Recommend using navigator.userAgent when possible
     "Accept":"text/xml"
   },
   onload:function(response) {
     alert([
       response.status,
       response.statusText,
       response.readyState,
       response.responseHeaders,
       response.responseText,
       response.finalUrl
     ].join("\n"));
   }
 });

リダイレクトされた先のURLがわかる。

追記

このエントリと同じように新機能を紹介しているエントリを幾つか見つけたんだけど、JSファイルを@resourceで保存してGM_getResourceTextで取り出してevalしている例を挙げてるのは何か特別な理由があるんだろうか。使いたい時だけ読み込むとか?@requireででかいライブラリを保存したスクリプトの実行時のオーバーヘッドとかあるのかなぁ。実装を読んでないのでなんともいえない。