v8访问DOM

时间:2012-10-04 10:56:10

标签: dom v8

我想更改v8引擎,以便能够拦截对DOM元素的每次访问。 如您所知,v8不会创建DOM树。浏览器创建DOM树。

  • 我的问题1:v8源代码中的方式/位置,将DOM内存结构传递给v8。
  • 如何以最小的努力进行拦截?

2 个答案:

答案 0 :(得分:1)

我无法确切地告诉你在V8中注册DOM的确切位置,但我有一些关于你可以开始搜索的提示。首先,当浏览器创建DOM时,您还应该在浏览器中查看,而不是v8。如果您在V8中找到了DOM注册的位置,您还会看到为此调用V8中的代码。

在铬中,Frame是包含网页的类。在整个创建过程中,它会实例化一个ScriptController对象,该对象本身会创建一个V8DOMWindowShell。传入DOMWrapperWorld及其DOMDataStore维护从DOM到JS对象的映射。

这并不完全告诉你在V8中注册DOM的位置,但在某处你应该找到这个。使用Eclipse并让它在chrome项目中搜索看似有趣的方法的参考或列出调用层次结构是这种研究的好工具。

PS :因为我自己需要类似的东西,所以我遇到了/src/out/Debug/gen/webcore/bindings这是一个在Chromium编译过程中创建并填充了DOM对象的所有模板的目录。 。您可以根据需要编辑它们,并根据您的更改重新编译。

如果您找到生成它们的脚本,您可能会同时为它们附加拦截器。

答案 1 :(得分:1)

使用V8注册DOM元素的代码不在V8源代码中,它位于Chromium源代码的另一部分:third_party / WebKit / Source /

你可能会感兴趣的是:

  • core / dom:此目录包含基本DOM类的实现,以及用于生成V8接口的IDL定义
  • core / html:相同,但针对特定于HTML的类
  • bindings / scripts:我相信这是脚本所在的位置,它将IDL转换为与V8接口的C源(我没有详细研究过这部分)
  • bindings / core / v8:这是代码实际调用V8执行脚本等的地方。