ぐりもんメモ

こんなHTMLがページ中にあったとき,

<a href="javascript: hoge();">hagehage</a>

Greasemonkey側でこのhogeの処理をフックしたいとします。

unsafeWindow.hoge = function() { ... };

なんて書けばいいんですが,呼び出す関数がGM_xmlhttpRequestを呼び出している場合は,「Greasemonkey access violation: unsafeWindow cannot call GM_xmlhttpRequest.」なんてエラーが出る。
そんなときはこうすればOK。

function request() {
...
GM_xmlhttpRequest(...);
...
}
unsafeWindow.hoge = function() {
  setTimeout(request, 10);
};

こうすると,GM_xmlhttpRequestの呼び出し元にunsafeWindowの関数が含まれなくなるっぽい。setTimeoutの第1引数に指定した関数を呼び出すのは,windowって理解でいいのかな。ちょっと詳細は分かりませんが,とにかくこれでうまくいく,というお話。