NPAPI插件开发详细记录:实用功能——添加、识别私有属性

来源:互联网 发布:有声阅读软件 编辑:程序博客网 时间:2024/05/29 18:45
据我所知,除了通用属性如:id、class等,object标签的属性有type、data、width、height,embed标签的属性有type、src、width、height。而flashplayer插件所具有的loop、autoplay等属性都是插件自己添加的,无法用NPN_GetProperty接口进行获取。假设我们要开发一个插件允许使用loop属性,那该怎么实现呢?
这个就要找到NS_NewPluginInstance函数中了,这个函数的参数是一个nsPluginCreateData。这个结构中就保存了标签中所有的属性和属性值。这个函数中创建了一个新的Plugin对象,Plugin对象的构造函数参数为NPP,故此处传递了nsPluginCreateData的instance。如果我们需要获取和识别私有属性如loop,推荐实现一个可以接受nsPluginCreateData的Plugin构造函数。这样就可以在plugin构造函数中获取私有属性的值了。
假设我们要实现私有属性loop。并使得只有如下方式loop才无效:不设置loop属性、loop=false、loop=no、loop=0.其他方式loop如:loop、loop=true、loop=yes、loop=1等都有效。那我们的代码可以这样写:
//读取私有属性。   m_bLoop=false;//初始设为false,保证没有设置该属性时无效int16_t argNum = cd->argc;//the number of HTML arguments in the element// cd->argn;//The argn array contains the attribute names// cd->argv;//the argv array contains the attribute valuesint16_t argCur = 0;for (argCur=0;argCur<argNum;argCur++){if (0==strcmp(cd->argn[argCur],"loop")){m_bLoop = true;std::string loop = std::string(cd->argv[argCur]);if(loop=="no"||loop=="false"||loop=="0") m_bLoop = false;}}

如上代码所实现的私有属性最简单的组合就是需要loop时用<object name=value loop > </object>不需要loop时用<object name=value > </object>。其中name=value对表示其他属性类似于:id=”plugindemo”。
原创粉丝点击