DOM 要素へのすべてのアクセスをインターセプトできるように、v8 エンジンを変更したいと考えています。ご存知のように、v8 は DOM ツリーを作成しません。ブラウザーが DOM ツリーを作成します。
- 私の質問 1: v8 ソース コードのどのように/どこで、DOM メモリ構造が v8 に配信されます。
- 最小限の労力でインターセプトを行うにはどうすればよいですか?
V8 で DOM が登録されている場所を正確にお伝えすることはできませんが、どこから検索を開始できるかについてのヒントがいくつかあります。まず、ブラウザーが DOM を作成するため、v8 ではなくブラウザーも参照する必要があります。V8 で DOM が登録されている場所を見つけた場合は、V8 でどのコードが呼び出されているかもわかります。
Chromium では、Frameは Web ページを含むクラスです。作成中に、それ自体がV8DOMWindowShellを作成するScriptControllerオブジェクトをインスタンス化します。渡されたDOMWrapperWorldとそのDOMDataStoreは、DOM から JS オブジェクトへのマッピングを維持します。
これは、DOM が V8 で登録されている場所を正確に示しているわけではありませんが、どこかでこれを見つける必要があります。Eclipse を使用して、クロム プロジェクト内の一見興味深いメソッドのリファレンスを検索したり、呼び出し階層を一覧表示したりすることは、このような調査に適したツールです。
PS : 私自身も似たようなものが必要なので/src/out/Debug/gen/webcore/bindings
、Chromium のコンパイル中に作成され、DOM オブジェクトのすべてのテンプレートが格納されるディレクトリを見つけました。必要に応じてそれらを編集し、変更を加えて再コンパイルできます。
それらを生成するスクリプトが見つかった場合は、おそらくそれらのインターセプターを一度にアタッチできます。