Greasemonkeyで定義した関数をJSONPで呼び出したい

greasemonkeyの中はふつうのcontentWindowとネームスペースが違うのでJSONPでは関数を呼び出してもらえない。

そこで Greasemonkey スクリプトとイベントで通信: Days on the Moon を思い出して、コールバックしてもらう関数の名前のところにコードを突っ込んでコマンドイベント経由で呼んでもらえるようにした。

wedataみたいにJSONPのコールバック関数の名前が引数で指定できるやつだとできる。

document.addEventListener("onJSONPLoad", function (request) {
  console.log(request);
},false );

var _injectscript = function (src) {
  var s = document.createElement('script');
  s.src = src;
  s.type = 'text/javascript';
  document.body.appendChild(s);
}

var u = 'http://wedata.net/databases/iview/items.json?callback=(function(json){var%20c=document.createEvent(%22CommandEvent%22);c.initCommandEvent(%22onJSONPLoad%22,true,false,json);document.dispatchEvent(c);})';

_injectscript(u);

が、そもそもJSONPドメインを越えられないXHRの代替品なのだから、ドメインの制約を受けないGM_XHRがあるんだからはじめからGM_XHRで読み込んでそれをevalすればいいだけなのにあとで気づいた。