日期:2014-05-16 浏览次数:20605 次
前面介绍过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_GetEntryPoints、NP_Initialize、NPP_New、NPP_SetWindow、NPP_GetValue。在NPP_New中,我们需要创建插件对象的实例,NPP_SetWindow中,浏览器会传入插件窗口的信息,最后一个NPP_GetValue,是浏览器来获取一些插件信息的。NPP_GetValue函数的结构是这样的:
NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value);