Greasemonkey むつかしい

ぐりもんは難しいよ!
例えば適当に「‹input type="button" value="hoge" onClick="hoge();" /›」とか埋め込んでやるとします。
ここで呼ばれる hoge をどのように定義してやるかが分からない。


常識的に定義してやったのではダメ。

function hoge(){ ...; }

スクリプトが走り終わった後に廃棄されてしまうから。
この問題に対する解決策は、windowオブジェクトに突っ込んでおくのが調べた限り一般的。

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

イベントハンドラとかはこんな感じで定義されてるみたいです。
が、これでも今回の例のようなのでは not defined。
腹がたったのでそのまま script 埋め込んでみました。

evalXPath(document, "/html/head")[0].innerHTML += '<script lang="Javascript">function hoge(elm){ alert(); }</script>';

evalXPath は XPath でDOM引張ってくるものです。getElementsByTagNameとか長いし使いにくいよ!
でこれでもダメでした。
疲れたのでここでやめました。


javascriptもDOMもgreasemonkeyも初心者なので何かつまらないミスをしてるかも知れません。何か分かる人はコメント下さい…
久しぶりの更新がこれか!