我正在研究v8来源。我花了3周的时间,但是我找不到8v如何调用DOM的功能。
Example for,
<script>
document.writeln("Hello V8");
</script>
我想知道调用序列的过程,DOM的writeln()函数。您能解释一下还是给我一些提示。
您可以检查找到[[.writeln函数的V8HTMLDocumentCustom.cpp文件:
void V8HTMLDocument::writelnMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args){
HTMLDocument* htmlDocument = V8HTMLDocument::toNative(args.Holder());
htmlDocument->writeln(writeHelperGetString(args), activeDOMWindow()->document());
}
如您所见,其中包含多个标头,其中一些标头将您带到其他标头,您可以在其中找到V8DOMConfiguration.h之类的文件>V8DOMConfiguration.h有一些评论:
class V8DOMConfiguration { public: // The following Batch structs and methods are used for setting multiple // properties on an ObjectTemplate, used from the generated bindings // initialization (ConfigureXXXTemplate). This greatly reduces the binary // size by moving from code driven setup to data table driven setup.
我从中得到的结果是,Chrome V8使用对象创建了“包装世界”,为每个对象重新创建了DOM,然后将数据仅传递到了创建的活动窗口中。我不太熟悉V8,但这是一个起点。也许对它有更深入了解的人可以更好地解释它。
更新
正如@Esailija指出的那样,如果在没有浏览器的情况下运行V8引擎,则没有可用的DOM。由于DOM是Webkit / Blink的一部分,因此链接的引用指向它们。浏览器渲染DOM之后,V8对象就会与DOM树元素匹配。这里有一个与此相关的问题:V8 Access to DOMGoogle v8引擎不知道或不存在。 DOM是通过Web浏览器创建的。在这种情况下,我认为从chrome项目中获取源代码并查找负责管理DOM的代码会更容易。这里是铬网站的链接,其中包含有关如何下载和编译源代码的说明。 The Chromium Projects