Dom对象扩展和JSC内置对象

来源:互联网 发布:大数据基础设施服务商 编辑:程序博客网 时间:2024/05/15 23:43

通过JavaScript Binding添加新DOM对象的三种方式及实作

http://blog.csdn.net/horkychen/article/details/7640052

DOM对象有三种型态:

   a.      寄生于现有对象,单实例。

     从属于某个全局对象,访问时透过宿主对象完成。如document.object或window.object, 也可以直接调用object.method.这个实现最为简单,按需分配,并且随着宿主对象释放就可以了。主要参考window的Navigator实现。

   b.      和window、document一样成为全局对象,单实例。

       这个实现最为复杂,且还没有看到相关文档说明。关键要将对象在合适的位置创建,并更新到JSC的堆中才能达到功能。可以参考document的实现,并且需要考虑执行流程,必须对代码做过一些了解,才可能知道相关的改动量。

   c.      多实例对象。可以在脚本中使用new创建。


为JavascriptCore添加自定义对象 http://www.cnblogs.com/baizx/archive/2010/08/17/1801662.html

只需在GlobalObject的构造函数添加一行:

putDirect(Identifier(globalExec(), "MyMath"), new (globalExec()) MyMathObject(globalExec(), MyMathObject::createStructure(d()->objectPrototype)), DontEnum | DontDelete);

就可以直接访问MyMath全局变量了,思路非常简单,就是要添加一个属性到全局访问空间,第一参数是名字,第二个参数是创建的对象。

所有的属性都必须是JSObject的实例,因此MyMathObject实际上继承与JSObject。

这时只是添加了一个MyMath变量,但是MyMathObject的定义并不知道,要添加自定义的功能就必须完善这个MyMathObject类


如何使用javascriptcore这个js引擎,例如如何向js引擎注入对象和函数,可以参考javascript\API\test下面的testapi.c和testapi.js文件。
注意对于js引擎而言,根本不存在window这个对象,window对象是DOM模型里面定义的对象,这个对象是浏览器引擎(webcore)向js引擎(javascriptcore)注入的,请参考WEBKITIDL。

添加运行时的js 自定义对象:在WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld接口中通过学习testapi.c来调用JSC api添加