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


android浏览器插件的核心是一个动态库,由c++写成。这里实现了NPAPI的接口。以BrowserPlugin为例,分析如下

先看 jni/main.cpp 。

NP_Initialize:初始化NPP/NPN函数。对于每一种插件来说,该函数只会被调用一次,而且是最先被调用的函数。

这个函数比较重要。它是浏览器和插件进行交互的关键。他的功能主要有三个:
1.得到浏览器定义的NPN_函数地址。
2.将插件定义的NPP_函数地址返回给浏览器。
3.得到Android提供的一些ANP_函数。
在这里,第三个功能初始化了一些全局变量,如gLogI等。

NP_Shutdown: 最后一个被调用的函数。

NP_GetMIMEDescription:获取MIME的函数。该MIME需要和网页插件object标签里面的type对应。

NP_GetValue: 获取插件名字和描述。


下面是插件实例的函数。

NPP_New:创建一个插件实例。根据参数创建不同的插件实例。这里的参数有两个:1. 插件绘制模型:Bitmap 和 Surface。 2. 插件类型。

如下示例会创建一个Background插件,插件的绘制模型为Surface

<object type="application/x-testbrowserplugin" id="sample"><param name="DrawingModel" value="Surface" /><param name="PluginType" value="Background" /></object>
这里需要注意的是,BrowserPlugin 使用一个对象 PluginObject 记录插件信息。主要是在一个apk里面包含多个插件的实现,共用了很多代码。

NPP_Destroy:销毁插件实例。

NPP_SetWindow:设置窗口相关。

NPP_NewStream:有数据到达。

NPP_DestroyStream:销毁数据流。

NPP_WriteReady:数据流可写的字节数

NPP_Write:往数据流中写数据

NPP_StreamAsFile:

NPP_Print:打印相关。


NPP_HandleEvent:事件相关。


NPP_URLNotify:

NPP_GetValue: 非常重要的函数。获取插件信息。需要处理NPPVpluginScriptableNPObject,对应js使用插件。

NPP_SetValue:



TBD

更多相关文章

  1. android 自动查找控件id
  2. Chrome不用插件自定义user-agent,模拟手机浏览器
  3. Android(安卓)SQLite总结(一)
  4. Android(安卓)recovery 原理分析
  5. [Android] Opengl ES 机型适配 bug 汇总
  6. Android(安卓)Jni调用so库,加载库失败分析
  7. android ide开发工具
  8. android 限制adb的访问目录
  9. TranslateAnimation动画

随机推荐

  1. MySQL远程连接不上的解决方法
  2. linux下mysql开启远程访问权限 防火墙开
  3. mysql 5.7.16 安装配置方法图文教程(ubunt
  4. ubuntu 16.04下mysql5.7.17开放远程3306
  5. Linux(Ubuntu)下Mysql5.6.28安装配置方法
  6. Linux(Ubuntu)下mysql5.7.17安装配置方法
  7. SQL GROUP BY 详解及简单实例
  8. MySQL中大数据表增加字段的实现思路
  9. Windows server 2008 r2上安装MySQL5.7.1
  10. MySQL无法读表错误的解决方法(MySQL 1018