日期:2014-05-16  浏览次数:20566 次

浏览器和js交互、NPAPI之NPRuntime开发

前面介绍过NPRuntime 

NPAPI 原本是由 Netscape 所制定的一组单纯的 C Plugin API,起初是无法支持 Scriptability;于是到了 2004 年底,各家 Browser (IE, Opera, Mozilla 等) 都同意支持NPRuntime 延伸 API 以支持 Scriptability,所以目前若是想写 Plugin则应该以 NPRuntime API 才能跨不同的 Browsers。

先介绍下浏览器的生命周期。


1.浏览器搜索加载DLL文件。

2.浏览器调用NP_GetEntryPoints,NP_Initialize()来初始化浏览器和插件的函数映射表。

i.调用浏览器端的NP_Initialize,将函数传给插件的函数表。

  ii.插件将定义好的函数通过NP_GetEntryPoints,传递到NPPluginFuncs中,让浏览器可以调用。

3.浏览器调用插件的NPP_GetValue,得到插件的对象,若支持js交互,则通过NPPVpluginScriptableNPObject来判断创建m_pScriptableObject对象。

4.浏览器通过HTML中的MIMTYPE,调用插件的NP_New来创建插件实例。然后对插件进行业务处理。

5.浏览器关闭页面时,调用插件的NPP_Destory来销毁插件实例。

6.浏览器关闭时,调用NP_shutdown关闭所有的资源。

以上就是浏览器插件的生命周期。


下面来看下NPRuntime的执行过程。

浏览器调用插件的方法的顺序,基本上为:NP_GetEntryPointsNP_InitializeNPP_NewNPP_SetWindowNPP_GetValue。在NPP_New中,我们需要创建插件对象的实例,NPP_SetWindow中,浏览器会传入插件窗口的信息,最后一个NPP_GetValue,是浏览器来获取一些插件信息的。NPP_GetValue函数的结构是这样的:

NPError  NPP_GetValue(NPP instance, NPPVariable variable, void *value);