我想更改v8引擎,以便能够拦截对DOM元素的每次访问。如您所知,v8不会创建DOM树。浏览器创建DOM树。
向V8注册DOM元素的代码不在V8源代码中,而是在Chromium源的另一部分中:third_party / WebKit / Source /
其中可能有一些您可能感兴趣的部分:
编辑(2020-05-27):在最近版本的Chromium中,这些内容已经出现。从铬83开始(我认为至少可以回到75左右),现在处于:
我无法确切地告诉您DOM在V8中的注册位置,但是对于您可以从哪里开始搜索,我有一些提示。首先,在浏览器创建DOM时,您还应该在浏览器中浏览,而不是v8。如果找到在V8中注册DOM的位置,您还将看到为此在V8中调用了什么代码。
在铬中,Frame是包含网页的类。在创建过程中,它会实例化一个ScriptController对象,该对象本身会创建一个V8DOMWindowShell。传入的DOMWrapperWorld及其DOMDataStore维护从DOM到JS对象的映射。
这并不能完全告诉您DOM在V8中的注册位置,但是您应该可以在周围找到它。使用Eclipse并让其搜索Chrome项目中看似有趣的方法的引用或列出调用层次结构,是进行此类研究的好工具。
P.S。:由于我自己需要类似的东西,因此我遇到了/src/out/Debug/gen/webcore/bindings
,该目录在Chromium的编译过程中创建并填充了DOM对象的所有模板。您可以根据需要对其进行编辑,然后重新进行更改。
如果找到生成它们的脚本,则可以一次为它们附加拦截器。