2007年 12月 15日

Firefox3 の Greasemonkey, unsafeWindow 内の prototype がとれない

なぜかわからないけど unsafeWindow 中のオブジェクトの prototype がとれないっぽい……

unsafeWindow.Hatena.Haiku.EntryForm.prototype //=> undefined

でもって回避しようとして以下のようなコードを書いてみたけど

	function unsafeeval (code) {
		var d = new Deferred;
		unsafeWindow.___eval = arguments.callee;
		arguments.callee.callback = function (r) {
			delete unsafeWindow.___eval
			d.call(r);
		};
		unsafeWindow.location.href = "javascript:"+encodeURIComponent("___eval.callback("+code+")");
		return d;
	}

	unsafeeval("Hatena.Haiku.EntryForm.prototype").
	next(function (proto) {
		alert(proto.showDrawForm); // とれてる
		proto.showDrawForm = function () {
			alert("aaa"); // 実行されない orz
		};
		alert(proto.showDrawForm); // かきかえはできてる
	});

って感じになる。javascript:alert(Hatena.Haiku.EntryForm.prototype.showDrawForm) するとちゃんと設定された関数が表示されるんだけど、実行はされない (もとの関数はもちろんよばれない)。だれかたすけて>< これは Fx のバグ?

prototype 以外への書きかえはもちろんうごく……