WebKit Plugin 开发指南

WebKit Plugin 开发指南

一、NPAPI介绍

WebKit plugin遵循了NPAPI (Netscape Plugin Application Programming Interface) 标准,支持这个标准的浏览器需要实现一组规定的API供插件调用,这组API形如NPN_XXX,插件可以利用这些API进行二次开发。而NPAPI插件以一个动态链接库作为物理载体进行提供,里面同样也实现了一组规定的API。形式包括NP_XXX和NPP_XXX,NP_XXX是系统需要默认调用的方法,用于认知这个插件,比如NP_Initialize,而NPP_XXX是用于插件完成一些实际功能,比如NPP_New。所有的插件都需要放置在指定的目录下,每个插件可以处理一种或者多种MIME格式的数据,如audio/x-ms-wma,说明该插件可以处理wma格式的音频。

NPAPI是一个很经典的插件方案,用dll进行注入,用协定的API进行通信,用字符串描述插件能力。插件宿主(在这里就是浏览器…)会根据能力描述,动态加载插件,并负责插件调用的流程和生命周期管理。而插件中,负责真实逻辑的处理,并可以构造UI与用户交流。以此类方式实现的插件系统,往往是处理的逻辑比较固定,但可扩展性不错。

 

二、WebKit plugin接口介绍

1)NP_XXX类接口

NP_XXX类接口一般为动态链接库的导出接口,主要有NP_Initialize、NP_GetMIMEDescription、NP_GetValue、NP_Shutdown的等几个函数,不同平台的接口可能略有不同,但基本功能都是一样的,都是通过接口来初始化、销毁以及认知此动态库。

详细的接口介绍请参照:

https://developer.mozilla.org/en/Gecko_Plugin_API_Reference:Plug-in_Side_Plug-in_API

 

2)NPP_XXX类接口

       NPP_XXX类接口一般为提供给浏览器引擎调用的接口,主要包括:

NPP_New、NPP_Destroy、NPP_SetWindow、NPP_NewStream、

NPP_DestroyStream、NPP_StreamAsFile、NPP_WriteReady、NPP_Write、

NPP_Print、NPP_HandleEvent、NPP_URLNotify、NPP_GetValue、

NPP_SetValue等

详细的接口介绍请参照:

https://developer.mozilla.org/en/Gecko_Plugin_API_Reference:Plug-in_Side_Plug-in_API

 

3)NPN_XXX类接口

NPP_XXX类接口一般为webkit引擎提供给plugin调用的接口,

主要包括:

NPN_GetURL、NPN_PostURL、NPN_RequestRead、NPN_NewStreamNPN_Write、

NPN_DestroyStream、NPN_Status、NPN_UserAgent、NPN_MemAlloc、NPN_MemFree、NPN_MemFlush、NPN_ReloadPlugins、NPN_GetJavaEnv、NPN_GetJavaPeer、NPN_GetURLNotify、NPN_PostURLNotify、NPN_GetValue、NPN_SetValue、NPN_InvalidateRect、NPN_InvalidateRegion、NPN_ForceRedraw、NPN_GetStringIdentifier、NPN_GetStringIdentifiers、

NPN_GetIntIdentifier、NPN_IdentifierIsString、  NPN_UTF8FromIdentifier、NPN_IntFromIdentifier、NPN_CreateObject、NPN_RetainObject、NPN_ReleaseObject、NPN_Invoke、

NPN_InvokeDefault、NPN_Evaluate、NPN_GetProperty、NPN_SetProperty、NPN_RemoveProperty、NPN_HasProperty、NPN_HasMethod、NPN_ReleaseVariantValue、NPN_SetException、NPN_PushPopupsEnabledState、NPN_PopPopupsEnabledState、NPN_Enumerate、NPN_PluginThreadAsyncCall、NPN_Construct、NPN_ScheduleTimer、NPN_UnscheduleTimer、NPN_PopUpContextMenu等

详细接口请参照:     https://developer.mozilla.org/en/Gecko_Plugin_API_Reference:Browser_Side_Plug-in_API  https://developer.mozilla.org/en/Gecko_Plugin_API_Reference/Scripting_plugins

 

三、WebKit plugin开发步骤介绍

1)      使用附件中的几个.h .cpp创建并编译一个mobile 6平台下的工程(附件中文件为一个NPAPI接口plugin的一个简单模板)

2)      根据plugin实际情况实现main.cpp中的函数,其中NP_XXX的函数必须都完全实现。简单介绍如下:

NP_Initialize          附件代码中已经实现不需要处理

NP_GetMIMEDescription  返回MIME Type类型,webkit通过此类型来识别plugin。

如"audio/x-ms-wma:wma:wma;video/x-ms-asf:asx:asx" 此返回字符串表示此plugin支持wma和asx类型格式的文件处理。

NP_GetValue          返回pluginName 和plugin Description两种字符串,

源码内有示例

NP_Shutdown 可以不管

3)      根据实际情况实现NPP_XXX函数,下面简单介绍几个常用的函数:

NPP_New 和NPP_Destory 创建及销毁plugin实例,此处不需要修改

NPP_NewStream 和NPP_DestroyStream  创建及销毁一个数据流的使用实例,传递数据给plugin的时候需要此两个接口,需要自己实现,NPP_NewStream也可传递URL给plugin。

NPP_WriteReady 和NPP_Write 在需要传递数据给plugin的时候,需要此两个接口,分别为获得可传递数据大小和传递数据的接口。

NPP_SetWindow 设置窗口句柄及窗口相对位置

4)      Plugin动态链接库名字必须为xxxWrapper.dll,否则webkit引擎无法识别

5)      Plugin动态链接库必须和浏览器或者widget管理器在同一目录下

6)      编译成功,放到指定目录下即可动态加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值