Subscribed unsubscribe Subscribe Subscribe

枕を欹てて聴く

香炉峰の雪は簾を撥げて看る

Greasemonkey ver 0.82解説

なんか解説を待たれていたらしいので, Twitter上だけでなく, 詳しく.
該当記事はこれ.
http://www.greasespot.net/2009/09/greasemonkey-082-released.html

* Do not inject scripts into file: and about: URLs by default, for security reasons. (#1000)
* The GM_openInTab() function respects the background loading tab behavior from Firefox preferences. (#1003)
* Specify label/control associations in "New Script" dialog, for accessibility. (#1010)
* Minor code clean ups and improvements. (#1011, #1020)
* Remove "forced" upgrade code. (#1013)
* Remove extra spacing around the status bar icon. (#1014)
* When adding include/exclude rules, include the port number in the default suggestion. (#1015)
* Reduce noise logged to the console when interacting with Firebug. (#1018)
* Apply security checks to GM_listValues() and GM_deleteValue(). (#1019)
* Fix missing localized strings in various locales. (#1022)
* Grease pages loaded into the sidebar. (#1023)
* Allow user scripts to access the latest available JavaScript engine. (#1026)

Scriptをfile or about URLで実行しなくなった.

今まではinclude *などにしていると実行していましたが, それが実行されなくなりました.
これ, はsecurity的なことですが, ちょっとだけ影響があって, まず.
LDRizeのfileページでの機能が使えなくなります. id:taizoooさんがSITEINFOを作ってくれていましたが, 使えなくなります.
また, Script Updatorが動かなくなります. 例えば, http://userscripts.org/scripts/show/8877 といったものです. 実はGMでのUpdatorは about:cache ページのCache Directoryを読み取って, そこからGMのconfig.xmlへのファイルパスを検索するといったことをしていたのですが, about: ページでの実行が制限され, 利用できなくなっています. wescript http://wescript.net/ とか使いましょう.
追記
about/file URLについてですが, Greasemonkeyの設定項目,

greasemonkey.fileIsGreaseable
greasemonkey.aboutIsGreaseable

がtrueならそれぞれ実行されるようになっています. by defaultではfalseです.
また, about:blankのみ例外として実行可能になっています. about:blankをGMでカスタマイズする的な要望が高いからでしょうか.

GM_openInTabの改正

GM_openInTabがTabを開いた新しいWindowのハンドルを返すようになりました. ただ, 仕様上読み込み直後はabout: URL扱いになるため, 一切触れることができません. しかも, same domain originの制限がかかるので, 実質できることはほぼないです.
しいて言えば, つまり,
http://d.hatena.ne.jp/Constellation上で,

var win = GM_openInTab('http://d.hatena.ne.jp/Constellation/archive');
var id = setTimeout(function(){
  if(id) clearTimeout(id);
  try{
    // throw error ?
    win.addEventListener
  } catch(e){
    id = setTimeout(arguments.callee, 100);
    return;
  }
  console.log(win);
}, 100);

となるわけですね. window.openの仕様に近づけたともいいます. しかし, windowもなんか不十分なので, これを使ってさあというわけには行かないようで, changesにもこれ自体は書いてありません.

触れられているのはこっちです. Backgroundで読み込むという設定にFirefoxがなっていれば, その挙動に従うようになりました. openNewTabWithを使うようになったようです.

UI修正

NewScript dialogのlabelにcontrol属性が追加されたため, includeとかのlabelをクリックすると, textboxへ飛びます.
また, status iconに margin: 0 5px が指定され, ちょっとゆとりが生まれました.

include/exclude rules

今までincludeのdefaultに使っていたURLのホスト部分はlocation.hostnameで取得していましたが, location.hostでの取得になりました. これは, 例えばrubygems serverとかを見ていて,

http://192.168.*.*:8808/rake-0.8.7/rdoc/index.html

とかになっていたとき, いままでならincludeは

http://192.168.*.*/rake-0.8.7/rdoc/index.html

でしたが, 今度からは

http://192.168.*.*:8808/rake-0.8.7/rdoc/index.html

になるということです. location.hostはport番号も含みます.

API checks

いままで, GM_listValues/GM_deleteValueにAPI checkが抜けていましたので, 追加されたようです.
ついでに, issuesのなかで, listValuesはkeyをenumerateするのにValuesはないだろ! とかいってらっしゃる方もいますが, 華麗にスルーなのでこの名前で行くようです.

具体的には, GM_apiLeakCheck関数でのcheckが入りました. このcheckはComponents.stack https://developer.mozilla.org/en/Components.stack を使って実行中のscriptファイル名を取得(こんなことできるんですね), そのファイル名が, nullでない+GMファイルでない(userscript)+chrome空間内のファイル(他の拡張)でない => web上のscriptファイル がGM_APIを読んでいる => errorを発する, という割と厳しいCheckです. これで,

unsafeWindow.GM_xmlHttpRequest = GM_xmlHttpRequest;

として, web page内で参照することはできなくなりました.

JS1.8対応

Fx3.5でevalInSandboxがversionを指定することができるようになったので, それを取り込んだものです.
Components.utils.evalInSandboxの第三引数に現在利用できる最大のversionが指定されるようになりました. これで, GMは常に最新のJSを利用できるようになります.
よって, yield/letといったJS1.8系が使えます. やったね!

{
  let test = 10;
  console.log(test);
}
console.log(typeof test);

Sidebar対応

SidebarのDOMContentLoadedも監視し, 実行するようになりました. よってこんなことも...
f:id:Constellation:20090927215739p:image

Firebug Context取得修正

よくerrorが出ていたやつです. Firebugが入っていない場合のための修正/Firebug Context取得失敗の場合の修正などが行われました.