我们有时候需要调整插件窗口的尺寸大小,比如说,当你创建一个视频播放窗口,在用户点击播放之后想要将窗口的大小调整为视频的实际大小。播放完毕之后又将窗口尺寸调整回原来的尺寸大小。
要实现这样一个功能,最简单的方式是写JS来实现,只需要首先用getElementById获取插件,然后设置其width属性和height属性。但是,通常情况下我们只管编写插件,不负责网页的设计,如果我们设计完一个插件,还要为网页设计人员写一大堆的注意事项,是不是可以说我们的插件写得不太高明呢?
为了能够在插件中更改插件窗口的尺寸。我们需要使用的接口其实很少,为了方便,我们为Plugin类添加一个成员函数ChangSize(int width, int height):函数代码如下:
void Plugin::ChangeSize(int width,int height) { NPObject *pluginObj; NPN_GetValue(m_pNPInstance,NPNVPluginElementNPObject,&pluginObj); NPIdentifier n_width_id = NPN_GetStringIdentifier("width"); NPIdentifier n_height_id = NPN_GetStringIdentifier("height"); NPVariant rval; // STRINGZ_TO_NPVARIANT("400",rval); INT32_TO_NPVARIANT(width,rval); NPN_SetProperty(m_pNPInstance,pluginObj,n_width_id,&rval); INT32_TO_NPVARIANT(height,rval); NPN_SetProperty(m_pNPInstance,pluginObj,n_height_id,&rval); }代码很简单,不多说了,唯一有难点的是NPNVPluginElementNPObject,因为在MDN上没有对NPN_GetValue(m_pNPInstance,NPNVPluginElementNPObject,&pluginObj);得到的NPObject做任何说明,可能老外都认为NPNVPluginElementNPObject这个词就能够完全说明问题吧!
得到了NPObject,然后就为它设置属性,只需要一个函数NPN_SetProperty和一个宏INT32_TO_NPVARIANT或者STRINGZ_TO_NPVARIANT就可以完成属性的设置,这样一来,就改变了插件窗口的尺寸了。
这种方式与JS方式的实质是一样的,只不过将代码在插件中进行了实现,而且不需要借助插件中调用JS代码。