私の目標は、JavaScript でのイベント ハンドラーのすべての登録を動的にトレースすることです。これには、ドキュメントとウィンドウ オブジェクトが含まれますが、これらに限定されません。コードの一部は、Web サイトの残りの部分が実行される前に実行され (onLoad)、どの関数がイベントに登録されるかを報告する必要があります。addEventListener
、などをラップしたいのですがonmouseclick
、onmessage
オブジェクトごとに個別にこれを行いたくありません。
Object.constructor
コンストラクターで自己検査を実行するように動作を変更することを検討していました。コードは非常に簡単で、大まかに次のようになります。
var toWrap = [ "addEventListener", "onclick", "..." ];
for ( var x in toWrap ) {
if ( toWrap[x] in this ) {
this[toWrap[x]] = wrap(toWrap[x], this[toWrap[x]]);
}
}
...しかし、コードを差し込む正しい場所はどこですか?
純粋な JavaScript ソリューションは、jQuery などよりも優先されます。私は PhantomJS で実装しています。
アップデート:
これを読んだ後、次のコードを思いつきました。うまく機能しているようです - 何か異論はありますか?
Object = ( function ( ) {
this.wrap = function(e) {
// ....
}
this.wrap();
});