原文出处: csdn lidp http://blog.csdn.net/perfectpdl


最近在做广电项目,要求根据规范做浏览器端javascript扩展。android本身应用层提供了扩展方法,但是这可恶的规范导致应用层根本不可行,只好在webkit引擎里面做。。。


android 上编写 浏览器插件有三种方式,

1. app 层,通过android framwork 层提供的 封装扩展,优劣:简单,有局限性

2. 通过 NPAPI 方式, 在 webkit上 通过 NPAPI方式扩展,优劣:相对复杂,接口统一,方便移植到其他平台

3. 通过本地扩展方式,类似于js中对象的实现,在webcore 上实现,优劣:复杂,功能强大,移植性不好。

下面为android 上 webkit js 本地扩展方案中实现全局本地对象步骤 :

android上js引擎默认使用的是V8 ,比用 wekit本身提供的引擎麻烦一些。

1. 在 WebCore/page/ 目录下创建 helloObj.h helloObj.cpp helloObj.idl
2. webcore 目录下 android.mk ,添加 page/helloObj.cpp
3. DOMWindow.cpp include "helloObj"
4. DOMWindow.cpp public 中添加
HelloObj* optionalHelloObj() const {return m_helloobj.get();}
PassRefPtr<HelloObj> helloObj() const;
实现:
PassRefPtr<HelloObj> DOMWindow::helloObj() const
{
if(!m_helloobj)
m_helloobj = HelloObj::create(m_frame);


return m_helloobj.get();
}


5.DOMWindow.h 中添加 class HelloObj;,private 部分添加 mutable RefPtr<HelloObj> m_helloobj;
6. DOMWindow.idl 中添加 readonly attribute HelloObj helloObj;
7. V8Index.h 中 添加 V(HELLOOBJ, HelloObj)
8. V8Index.cpp 中添加 #include "V8HelloObj.h"
9. Android.derived.v8bindings.mk中添加 $(intermediates)/bindings/V8HelloObj.h \
10. DOMWindow.cpp 中的clear函数添加
if(m_helloobj)
m_helloobj->disconnectFrame();
m_helloobj = 0;




11. DerivedSourcesAllInOne.cpp 中添加 #include "bindings/V8HelloObj.cpp"

更多相关文章

  1. Unity 与 Android(安卓)(Android(安卓)Studio)的交互
  2. 适用于Android的OpenSL ES指南-OpenSL ES的Android扩展
  3. 简析Android对Linux内核的改动
  4. Android调Ajax和动态添加JS中的token(Android(安卓)和JS完全交互
  5. 在ListItem某组件添加响应事件
  6. Android(安卓)TextView显示文字过长时添加阴影渐变消失效果
  7. Android电子商务企业项目案例技术搜集
  8. android设置背景色为透明
  9. android 添加一个新的android 键值

随机推荐

  1. SQL Server数据表字段自定义自增数据格式
  2. SQLServer批量更新两个关联表数据的方法
  3. 使用SQL批量替换语句修改、增加、删除字
  4. SQL Server 存储过程遇到“表 &#39;&#39;
  5. 浅谈数据库优化方案
  6. Win10 64位安装个人版SQL2000图文教程
  7. SQL Server触发器和事务用法示例
  8. sqlserver进程死锁关闭的方法
  9. 获取SqlServer存储过程定义的三种方法
  10. SQL注入全过程深入分析