语境
我目前正在尝试为混合 Android 应用程序设计模型生成器。目标如下:给定任何使用 PhoneGap 开发的混合 Android 应用程序,生成一个描述 UI 状态的 UI 模型(在这种情况下,我将 UI 状态视为等同于 DOM 状态)以及到这些 UI 状态的转换(由动作表示 - 例如,单击 DOM 元素 X)。该模型由有限状态机表示,其中节点是 UI 状态,边缘是转换。
问题
我当前的任务是想出一种方法来确定 DOM 元素是否注册了事件处理程序(现在假设我们只对初始DOM 状态感兴趣)。在这个 StackOverflow 答案的帮助下,我能够提出一个解决方案,它使用 webView.loadURL("javascript:" + ....) 来确定一个元素是否通过使用例如 element.onclick 或通过使用 jQuery 和 Prototype 等库提供的方法。但是,由于同一个 StackOverflow 答案中指定的原因,我目前无法确定一个元素是否通过 addEventListener() 向其注册了一个事件。(再次,为简单起见,假设我们只对在页面加载后、在任何用户交互之前注册的事件感兴趣)。
问题
- 我计划采取的方法如下:我计划从 PhoneGap 应用程序中截取 JavaScript 代码。一旦被截获,我将检测代码(例如,使用 Rhino),以便在每次调用 addEventListener() 之后,我将为该调用中涉及的 DOM 元素放置一个“标记”。然后,我会将这个检测代码传递给 WebView,以便加载这个检测的 JavaScript 代码,而不是原始的 JavaScript 代码。通过这样做,我可以确定调用了哪些元素 addEventListener()。这看起来很简单,但问题是,我想不出一种方法来拦截JavaScript 代码以进行检测,并通过检测代码,以便它被加载以代替原始代码。如前所述,是否有任何工具可以让我进行拦截和传递?顺便说一句,我正在使用 Android 模拟器来运行 PhoneGap 应用程序。
- 还有其他更简单(或更优雅)的方法我应该考虑吗?