steve1979
steve1979

Reputation: 63

How does v8 call DOM's function?

I am studying v8 sources. I have spent 3 weeks but I couldn't find that how 8v call DOM's function.

Example for, 
<script>
    document.writeln("Hello V8");
</script>

I want to know process of call sequences, writeln() function of DOM. Could you explain about this or give me some hints.

Upvotes: 1

Views: 1067

Answers (1)

Jos&#233; SAYAGO
Jos&#233; SAYAGO

Reputation: 798

You could check V8HTMLDocumentCustom.cpp file where the .writeln function is found:

void V8HTMLDocument::writelnMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args){
      HTMLDocument* htmlDocument = V8HTMLDocument::toNative(args.Holder());
      htmlDocument->writeln(writeHelperGetString(args), activeDOMWindow()->document());
}

As you can see there are several headers included, some of those includes lead you to other headers, where you find files like V8DOMConfiguration.h

V8DOMConfiguration.h has some comments:

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.

What I get from this is that Chrome V8 creates "Wrapper Worlds" with objects, recreating DOMs for each one of them, then it just pass data to the active window created, though.

I'm not well versed in V8, however this is a starting point. Maybe someone with a deeper knowledge of it can explain it better.

Update

As @Esailija points out V8 engine when run without a browser has no DOM available. As DOM is part of Webkit/Blink, linked references point to them. Once browser has rendered DOM then V8 Objects are matched with DOM tree elements. There's a related question about this here: V8 Access to DOM

Upvotes: 1

Related Questions