WebKit的JS Binding解析

转载请注明出处:http://blog.csdn.net/horkychen

WebCore与JavaScriptCore之间使用了Proxy模式,WebCore为JSC提供了一层binding层做为封装。

Webkit参照W3C Web IDL(之前称为Language Bindings for DOM Specifications)描述DOM接口,但不完全相同。其完整的名称为WebKitIDL,
详细的定义可以参考下面的链接:

    http://trac.webkit.org/wiki/WebKitIDL

 

每一个DOM组件除了实现文件外,都有一个IDL文件定义它的接口规格。可以在WebCore相关的目录下找到。

 

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对象.

参考:为JavaScript Binding添加新DOM对象的三种方式及实作

 

时间: 2024-08-31 14:08:07

WebKit的JS Binding解析的相关文章

JavaScriptCore, WebKit的JS实现(完)

目前,JavaScript的实现已经成为编译领域的一个重要组成部分.主要包括Google的V8, Mozilla的SpiderMonkey, 还有Webkit使用的JavaScriptCore.   jsc:WebKit的JS引擎( js for webkit) JavaScriptCore (JSC)正是WebKit的JavaScript实现.   起初,JavaScriptCore是一个基于的树的简单解释器(tree-based interpreter). 但在2008年6月,几位Apple

JavaScriptCore, WebKit的JS实现(一)

什么是method JIT? 什么是DFG JIT? JSC的DFG JIT与V8 Crankshaft相比有何优劣? JIT:一个方法式的JIT(a method jit) *关于method JIT,可以参考另一份档案. 关于解释器(interpreter)和堆栈(stack,也就是寄存器文件,register file)都是应用了方法式JIT(method JIT). 所谓简单方法JIT(确实没什么特别的名字)做得事和字节码解释器完全一样,只不过它的结果是机器码,而不是虚拟的机令集.  

js正则解析URL参数示例代码

URL参数使用js正则解析具体实现代码如下,有需求的朋友可以参考下,希望对大家有所帮组   复制代码 代码如下: var url = "http://127.0.0.1/e/action/ShowInfo.php?classid=9&id=2";//定义变量 function parse_url(_url){ //定义函数 var pattern = /(w+)=(w+)/ig;//定义正则表达式 var parames = {};//定义数组 url.replace(patt

js/jquery解析json和数组格式的方法详解

 本篇文章主要是对js/jquery解析json和数组格式的方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在解析之前,我们必须弄清楚几个概念:数组,关联数组以及json之间有哪些区别和联系点?   一.概念介绍 1.数组   语法:  ECMAScript v3规定了数组直接量的语法,JavaScript 1.2和JScript 3.0实现了它.可以把-个用逗号分隔的表达式列表放在方括号中,创建并初始化-个数组.这些表达式的值将成为数组元素.例如:   var a = [1

javascript-页面js文件解析执行过程

问题描述 页面js文件解析执行过程 在高性能javascript书中有如下讲解,感觉甚是不懂!如下:每个文件必须等到前一个文件下载并执行完成才开始下载.如下图:(http://img.ask.csdn.net/upload/201508/25/1440490986_104397.png) 疑问:一些外部引入的js文件不是不能被执行么,还有那些页面加载完后再执行的js文件,这里为什么是下载并执行呢!又晕了,求大神解答!感谢! 解决方案 这个要看你的htnl怎么写的,如果是外部js,那么肯定是先下载

源代码-js如何解析websocket返回的二进制图片数据并且显示在div中

问题描述 js如何解析websocket返回的二进制图片数据并且显示在div中 最好是有简单源代码 急需要解决 !!!!!!!!! 麻烦各位大神了! 解决方案 <img src="" id="img"/> <script> ws = new WebSocket("ws://192.168.0.171:1235"); ws.onopen = function () { alert("连接成功"); ws.

JS如何解析json数据,原数据类型是Map&amp;amp;lt;Object,List&amp;amp;lt;Object&amp;amp;gt;&amp;amp;gt;

问题描述 JS如何解析json数据,原数据类型是Map<Object,List<Object>> 在js中如何解析出其中的值? 使用jquery的each函数如何解析?

js XMLDOM解析xml 文档实例解析

js XMLDOM解析xml 文档实例解析 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta htt

Jquery+asp.net 后台数据传到前台js进行解析的办法说明

  我们经常用jquery读取后台数据,后台返回数据.后台数据格式就有很多了,但是js里面没有什么类型之分. 所以在解析后台数据的时候,我们需要根据后台的数据情况,特殊处理和对待. 我这里后台用的是asp.net提供的wcf服务,也有ashx一般处理程序.大致原理差不多. C#中我们经常用的对象,有实体对象比如:User;有List集合,一般为返回列表. 复杂点的还有对象嵌套对象或者list集合的.不过没什么差别,只要看你的数据多少来决定是由js处理数据, 还是后台处理了直接返回最终结果. 1.