WebKit提供了一組perl腳本完成IDL轉換功能。入口腳本爲generate-binding.pl, 示意圖如下:
生成的接口通過JSNode與Node關聯,從而實現了與DOM各組件的關聯。
JSDocument會在初始化時被JSGlobalObject的addStaticGlobals壓入一個jsNull到JSC的Heap, 在準備解析腳本前將一個對象通過JSDomWindowBase::updateDocument更新到JSC::Heap中,供JSC在執行期使用。Frame的setDocument方法也會在讀到腳本時被調用,以更新合適的document對象到JSC。
當JavaScript以document爲接口,呼叫如getElementById獲取組件時, 其執行序列如下:
下面是jsDocumentPrototypeFunctionGetElementById的實現:
EncodedJSValue JSC_HOST_CALL jsDocumentPrototypeFunctionGetElementById(ExecState* exec)
{
JSValue thisValue = exec->hostThisValue();
……
JSC::JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl->getElementById(elementId)));
return JSValue::encode(result);
}
*其中的impl就是通過JSNode接口關聯到的Document對象.