android浏览器插件小结(一)

做了一段时间的WebKit开发,后来又研究了一下WebKit的插件,但一直没有时间总结一下,现在终于有点时间可以梳理一下了,也希望能跟大家多多交流


首先要说明一下什么是WebKit插件,WebKit插件就是内核是WebKit的浏览器的插件,IE的不知道,但firefox的插件应该与WebKit插件类似,因为WebKit插件使用的主要一个技术或者说接口叫做NPAPI,而这套接口在mozilla的网站上面有详细的介绍,各位有兴趣可以去mozilla看看。回过头来,啥叫浏览器插件呢?或者说为啥要有这么个东西存在?我的理解是为了扩展浏览器的功能,大家知道,浏览器的功能主要是渲染网页,网页主要是由html,javascript,css组成,另外还包括一些资源文件,如果只是渲染网页,浏览器一般够用了,但随着网页内容的不断多样化,复杂化,比如多媒体文件的播放,浏览器已经不能提供这些功能了,于是插件就出现了,其中最有代表性的就是flash了


插件的加载过程简单的说就是:

  • 浏览器在解析网页的时候,发现某个节点声明了某个MIME类型
  • 根据这个MIME类型查找注册过的插件,找到了就加载该插件

具体的说,在Android上面这个过程如下:

  1. 当发现网页上存在object节点的时候,WebKit将进入加载plug-in的流程
  2. 查找所有Intent类型为PLUGIN_ACTION的service,返回所有service的插件lib路径,形如/data/data/com.android.sampleplugin/lib(注:可能还会搜索/system/lib/下面的so)
  3. 遍历各个目录中的动态库.so文件,通过预先定义的entryPoint解析出插件的信息,包括名字,描述,mime类型等,并保存这些信息
  4. 整个WebView在layout的时候会创建plug-in,在这个过程中根据mime类型等创建PluginView(插件视图?)
  5. 接着会建立PluginPackage,建立的过程中会调用NP_Initialize,完成Plugin的初始化工作

注:在3中建立PluginView的时候会找到对应mime类型的PluginPackage(mime和PluginPackage一一对应),这样在PluginView的start里面会利用PluginPackage的接口调用NPP_New,创建plugin的实例(一个PluginView和一个plugin的实例一一对应),并且同时创建一个对应的NPObject的实例,记录在NPP的pdata里面(一个plugin的实例对应一个NPObject的实例)




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值