unsafeWindow を覚えた
Greasemonkey で JSONP を使おうと思い、自分で作った 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 を使うということですかね。