android 4.0.1 webkit 基于JSC的JS 扩展
2013-02-21 13:12
197 查看
一. 扩展单对象
要在页面上使用我们自定义的SingleObject对象。
需要作如下修改:
webkit/Source/WebCore/Android.mk
SingleObject.h
SingleObject.cpp
以上两个文件是SingleObject在webkit中的具体实现,修改webkit的Android.mk把实现文件编译进webkit.
webkit/Source/WebCore/Android.derived.jscbindings.mk
webkit/Source/WebCore/page/DOMWindow.idl
SingleObject.idl
webkit 的对象暴露给JSC的方式是定义一个idl文件,webkit 通过专门的perl 脚本解析这个idl文件生成对应的JSObject.h和JSObject.cpp.
JSC处理的对象就是生成的JSObject。JSObject是webkit中实际实现类的影子类
所以我们需要实现SingleObject.idl 在这个idl文件中把需要提供给页面使用的属性和接口添加进去。
调用perl脚本解析idl生成JSObject的过程在Android.derived.jscbindings.mk中。
解析DOMWindow.idl生成的JSDOMWindow是整个DOM的入口,SingleObject是单对象不需要提供Constructor,以DOMWindow的只读属性方式出现,所以我们需要在DOMWindow.idl中添加SingleObject.
webkit/Source/WebCore/page/DOMWindow.h
webkit/Source/WebCore/page/DOMWindow.cpp
DOMWindow.idl中将SingleObject声明成了DOMWindow的只读属性,所以扩展对象需要在DOMWindow.h中声明,创建过程在DOMWindow.cpp中。
二. 扩展多对象
要在页面上使用new 操作符创建自定义的MultiObject对象。
需要作如下修改。
webkit/Source/WebCore/Android.mk
webkit/Source/WebCore/ccdt/media/MultiObject.cpp
webkit/Source/WebCore/ccdt/media/MultiObject.h
以上两个文件是MultiObject在webkit中的具体实现,修改webkit的Android.mk把实现文件编译进webkit.
webkit/Source/WebCore/Android.derived.jscbindings.mk
webkit/Source/WebCore/page/DOMWindow.idl
MultiObject.idl
webkit 的对象暴露给JSC的方式是定义一个idl文件,webkit 通过专门的perl 脚本解析这个idl文件生成对应的JSObject.h和JSObject.cpp.
JSC处理的对象就是生成的JSObject。JSObject是webkit中实际实现类的影子类
所以我们需要实现SingleObject.idl 在这个idl文件中把需要提供给页面使用的属性和接口添加进去。
调用perl脚本解析idl生成JSObject的过程在Android.derived.jscbindings.mk中。
解析DOMWindow.idl生成的JSDOMWindow是整个DOM的入口,SingleObject是多对象需要提供Constructor,所以我们需要在DOMWindow.idl中添加SingleObject.
DOMWindow.idl中声明MultiObject的方式的不同决定了JSMultiObjectConstructor来源的不同。
1. attribute MultiObjectContructor MultiObject;
这种声明方式表示使用的是perl 解析MultiObject.idl自动生成的JSMultiObjectConstructor。
2. attribute [JSCCustomGetter] MultiObject;
这种声明方式表示使用的是我们自定义的JSMultiObjectConstructor。
采用第二种声明方式,表明我们要自己实现JSMultiObjectConstructor。
所以需要额外改动如下文件:
webkit/Source/WebCore/Android.jscbindings.mk
webkit/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
JSMultiObjectConstructor.cpp
JSDOMWindowCustom.cpp中添加如下内容:
JSValue JSDOMWindow::MultiObject(ExecState* exec) const
{
return getDOMConstructor<JSMultiObjectConstructor>(exec, this);
}
JSMultiObjectConstructor.cpp是JSMultiObjectContructor的具体实现文件,在webkit/Source/WebCore/Android.jscbindings.mk中添加JSMultiObjectConstructor.cpp将其编译到webkit中。
另外,在MultiObject.idl中也可以指定MultiObject的属性实现是采用perl脚本自动生成,还是我们自定义。
1.readyonly attribute propertyName;
2. attribute [Reflect] propertyName;
这两种方式表明是采用JSMultiObject.cpp中自动生成的方法实现属性。
3.attribute [Custom] propertyName;
这种声明方式表明是采用我们自定义的方法。
所以需要额外改动如下文件:
webkit/Source/WebCore/Android.jscbindings.mk
JSMultiObjectCustom.cpp
JSMultiObjectCustom.cpp是我们自定义方法的具体实现文件,在webkit/Source/WebCore/Android.jscbindings.mk中添加JSMultiObjectCustom.cpp将其编译到webkit中。
要在页面上使用我们自定义的SingleObject对象。
需要作如下修改:
webkit/Source/WebCore/Android.mk
SingleObject.h
SingleObject.cpp
以上两个文件是SingleObject在webkit中的具体实现,修改webkit的Android.mk把实现文件编译进webkit.
webkit/Source/WebCore/Android.derived.jscbindings.mk
webkit/Source/WebCore/page/DOMWindow.idl
SingleObject.idl
webkit 的对象暴露给JSC的方式是定义一个idl文件,webkit 通过专门的perl 脚本解析这个idl文件生成对应的JSObject.h和JSObject.cpp.
JSC处理的对象就是生成的JSObject。JSObject是webkit中实际实现类的影子类
所以我们需要实现SingleObject.idl 在这个idl文件中把需要提供给页面使用的属性和接口添加进去。
调用perl脚本解析idl生成JSObject的过程在Android.derived.jscbindings.mk中。
解析DOMWindow.idl生成的JSDOMWindow是整个DOM的入口,SingleObject是单对象不需要提供Constructor,以DOMWindow的只读属性方式出现,所以我们需要在DOMWindow.idl中添加SingleObject.
webkit/Source/WebCore/page/DOMWindow.h
webkit/Source/WebCore/page/DOMWindow.cpp
DOMWindow.idl中将SingleObject声明成了DOMWindow的只读属性,所以扩展对象需要在DOMWindow.h中声明,创建过程在DOMWindow.cpp中。
二. 扩展多对象
要在页面上使用new 操作符创建自定义的MultiObject对象。
需要作如下修改。
webkit/Source/WebCore/Android.mk
webkit/Source/WebCore/ccdt/media/MultiObject.cpp
webkit/Source/WebCore/ccdt/media/MultiObject.h
以上两个文件是MultiObject在webkit中的具体实现,修改webkit的Android.mk把实现文件编译进webkit.
webkit/Source/WebCore/Android.derived.jscbindings.mk
webkit/Source/WebCore/page/DOMWindow.idl
MultiObject.idl
webkit 的对象暴露给JSC的方式是定义一个idl文件,webkit 通过专门的perl 脚本解析这个idl文件生成对应的JSObject.h和JSObject.cpp.
JSC处理的对象就是生成的JSObject。JSObject是webkit中实际实现类的影子类
所以我们需要实现SingleObject.idl 在这个idl文件中把需要提供给页面使用的属性和接口添加进去。
调用perl脚本解析idl生成JSObject的过程在Android.derived.jscbindings.mk中。
解析DOMWindow.idl生成的JSDOMWindow是整个DOM的入口,SingleObject是多对象需要提供Constructor,所以我们需要在DOMWindow.idl中添加SingleObject.
DOMWindow.idl中声明MultiObject的方式的不同决定了JSMultiObjectConstructor来源的不同。
1. attribute MultiObjectContructor MultiObject;
这种声明方式表示使用的是perl 解析MultiObject.idl自动生成的JSMultiObjectConstructor。
2. attribute [JSCCustomGetter] MultiObject;
这种声明方式表示使用的是我们自定义的JSMultiObjectConstructor。
采用第二种声明方式,表明我们要自己实现JSMultiObjectConstructor。
所以需要额外改动如下文件:
webkit/Source/WebCore/Android.jscbindings.mk
webkit/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp
JSMultiObjectConstructor.cpp
JSDOMWindowCustom.cpp中添加如下内容:
JSValue JSDOMWindow::MultiObject(ExecState* exec) const
{
return getDOMConstructor<JSMultiObjectConstructor>(exec, this);
}
JSMultiObjectConstructor.cpp是JSMultiObjectContructor的具体实现文件,在webkit/Source/WebCore/Android.jscbindings.mk中添加JSMultiObjectConstructor.cpp将其编译到webkit中。
另外,在MultiObject.idl中也可以指定MultiObject的属性实现是采用perl脚本自动生成,还是我们自定义。
1.readyonly attribute propertyName;
2. attribute [Reflect] propertyName;
这两种方式表明是采用JSMultiObject.cpp中自动生成的方法实现属性。
3.attribute [Custom] propertyName;
这种声明方式表明是采用我们自定义的方法。
所以需要额外改动如下文件:
webkit/Source/WebCore/Android.jscbindings.mk
JSMultiObjectCustom.cpp
JSMultiObjectCustom.cpp是我们自定义方法的具体实现文件,在webkit/Source/WebCore/Android.jscbindings.mk中添加JSMultiObjectCustom.cpp将其编译到webkit中。
相关文章推荐
- 新版本的webkit 针对jsc的js扩展方式
- android 上 webkit js 本地扩展之全局本地对象实现步骤
- android 上 webkit js 扩展之全局本地对象实现步骤
- android webkit 添加全局js function
- node.js 和 node-webkit C++扩展方法
- android上基于webkit开发页面小结(1)
- iScroll.js 用法参考【基于webkit的下拉刷新】
- android 4.0.1 webkit 添加自定义事件接口发送自定义Event
- android webkit 加载js 出现 Error//webConsole:Uncaught Error:cannot call method ‘setItem’ of null at...
- webkit的js对象扩展(一)——binding方式创建自定义对象(单实例)
- 基于Native.js实现Android文件的读写操作
- Android基于JsBridge封装的高效带加载进度的WebView
- android4.0.1 webkit 主资源下载过程分析
- 2048聚合版开源代码,cocos2d-js编写,基于CocosEditor开发工具,可运行Android,ios,html5等
- webkit的js对象扩展(二)——binding方式创建自定义对象(多实例)
- 毕设(基于js的firefox的web安全评测系统)----给火狐浏览器安装自己做的扩展插件
- android 中 webkit 及js 键码映射
- webkit开发之JS扩展篇
- 基于AndroidAnnotation扩展的一个异步调用框架
- webKit之扩展JSC的三种方法