ウェブサービスを作っています。

unsafeWindow を覚えた

GreasemonkeyJSONP を使おうと思い、自分で作った JSONP オブジェクトを使ってみたところ、コールバック関数未定義のエラーが出ました。
何でだろ.. と思っていたのですが、Greasemonkey の window オブジェクトはふつうの window オブジェクトとは違うみたいですね。

a = function() { alert('よばれたよ'); }
a();

とか

window.a = function() { alert('よばれたよ'); }
a();

っていうグリモン作って動かすとちゃんと動きます。


ところがここで、Firebug から

a();

を実行すると

ReferenceError: a is not defined

と出ます。a さん未定義。


逆に

unsafeWindow.a = function() { alert('よばれたよ'); }
a();

っていうグリモンを作って動かすと、

a is not defined

と出ますが、Firebug から

a();

を実行すると、ちゃんとアラートが出ます。


どういう仕組みになってるのかちゃんと理解してないので問題ですが、ふつうにグリモン作るときは window オブジェクトの使用で問題ないはず。
グリモンからグリモン外部へ window オブジェクトの新しいデータを渡したいときは unsafeWindow を使うということですかね。