2

Seleniumスクリプトを記録するために、キーアップやクリックなど、ページ上のすべてのイベントをインターセプトできる必要があります。現在、ページ上のすべての要素にイベントリスナーをアタッチすることでこれを行っていますが、イベントのバブリングを停止するリスナーがすでに存在する場合、イベントが私に届くことはありません。

デバッグ時またはJavaScriptコードからDOMノードでイベントリスナーを見つける方法https://stackoverflow.com/a/6434924/15255から「addEventListenerを置き換える」アプローチを試しました。、しかしこれはうまくいかないようです。

これはすべてFirefoxアドオンに含まれているので、特権的なことを行うことができますが、既存のリスナーを列挙または変更するための機能はあまりないようです。誰かがこれを行う方法についての提案がありますか?

編集:現状のコード:

jQuery(frame.document).
        bind("dblclick", {}, this.listeners.writeJsonClicks, true).
        bind("keyup", {}, this.listeners.writeJsonChange, true).
        bind("change", {}, this.listeners.writeJsonChange, true);

明確にするために:frame.document内のドキュメントの内容を制御することはできません。これは、ユーザーがスクリプトを記録しているページです。問題は、ドキュメントが読み込まれるまでに、独自のキャプチャがすでにインストールされているため、イベントを受信できないことです。

ページDOMが完全に読み込まれたときに、読み込み中のある時点でページをキャッチしようとしましたが、リスナーをアタッチするJSはまだ実行されていません。NsIObserverServiceを使用しdocument-element-insertedて有望に見えますが、そのイベントはDOMが存在するとすぐに発生します。ドキュメントとそのヘッドはロードされますが、本文はロードされません。

基本的に、既存のリスナーを並べ替えて、以前のリスナーの前に挿入する方法、DOMツリーがロードされているがJSがまだ実行されていないときにコードを実行できる方法、または方法のいずれかが必要です。 addEventListenerへの呼び出しをインターセプトして、追加されたリスナーをラップし、盗聴させます。

4

1 に答える 1

2

キャプチャ リスナーを登録する必要があります。イベントのキャプチャを停止することはできません。

document.addEventListener("keyup", function(event)
{
  console.log("keyup event received on " + event.target);
}, true);
于 2012-06-28T18:37:52.503 に答える