環境
現在、ハイブリッド Android アプリ用のモデル ジェネレーターを設計しようとしています。目標は次のとおりです。PhoneGap を使用して開発されたハイブリッド Android アプリが与えられた場合、UI の状態 (この場合、UI の状態を DOM の状態と同等のものとして扱っています) とこれらの UI の状態への遷移を記述する UI モデルを生成します。 (アクションによって示されます - たとえば、DOM 要素 X をクリックします)。モデルは、ノードが UI 状態で、エッジが遷移である有限状態マシンによって表されます。
問題
私の現在のタスクは、DOM 要素にイベント ハンドラーが登録されているかどうかを確認する方法を考え出すことです (ここでは、最初のDOM 状態のみに関心があると仮定しましょう)。このStackOverflowの回答の助けを借りて、webView.loadURL("javascript:" + ....) を使用して、要素にイベントが登録されているかどうかを判断するソリューションを思いつくことができました。たとえば、element.onclick を使用するか、またはjQuery や Prototype などのライブラリによって提供されるメソッドを使用します。ただし、同じ StackOverflow 回答で指定されている理由により、要素に addEventListener() を介してイベントが登録されているかどうかを現在判断できません。(繰り返しになりますが、簡単にするために、ページが読み込まれた直後、ユーザー操作の前に登録されたイベントのみに関心があると仮定しましょう)。
質問
- 私がとろうとしているアプローチは次のとおりです。PhoneGap アプリから JavaScript コードをインターセプトする予定です。インターセプトされたら、addEventListener() を呼び出すたびに、その呼び出しに関係する DOM 要素の「マーカー」を配置するように、(Rhino などを使用して) コードを計測します。次に、このインストルメント化されたコードを WebView に渡し、元の JavaScript コードの代わりにこのインストルメント化された JavaScript コードが読み込まれるようにします。そうすることで、addEventListener() が呼び出された要素を特定できます。これは非常に簡単に思えますが、問題は、インストルメンテーションのために JavaScript コードをインターセプトし、渡す方法を理解できないことです。元のコードの代わりに読み込まれるように、インストルメント化されたコード。説明されているように、この傍受と通過を可能にするツールはありますか? ちなみに、PhoneGap アプリの実行には Android エミュレーターを使用しています。
- おそらくより単純な(またはよりエレガントな)他のアプローチはありますか?