阅读理解FireFox浏览器插件开发文档(二)

三、创建实例
初始化之后就可以创建多个实例了。创建实例的时候通过NPN_SetValue 设置有窗口(默认)或没有窗口。
插件实例通过NPP_New 和 NPP_Destroy创建和销毁

NPError NPP_New(NPMIMEType pluginType,
                NPP instance, uint16 mode,
                int16 argc, char *argn[],
                char *argv[], NPSavedData *saved);

NPP_New创建一个MIMEType类型的插件实例,你可以分配一些私有数据。可以将多个 MIME 类型指派给插件, 这可能允许插件响应不同类型的数据流, 具有不同的接口和行为。
参数mode有两个可选值,NP_EMBED或NP_FULL,NP_EMBED和其他内容共享浏览器窗口,NP_FULL看似是一个新窗口。
接下来三个参数可以用一个例子理解:

<embed src="movie.avi" height="100" width="100" loop="true">

argc = 4
argn = { "src", "height", "width", "loop" }
argv = { "movie.avi", "100", "100", "true" }

保存参数允许插件的实例保存其数据, 并且当实例被销毁时, 将数据传递到该插件的下一个 url 实例。数据保存在历史记录列表中。只要该插件仍显示在该列表中, 则保存的数据将与该页关联;任何新实例都接收此数据。(必应翻译厉害)

四、销毁实例
当删除插件实例时, 浏览器调用 NPP_Destroy, 通常是因为用户已经离开了包含实例的页面, 关闭了窗口, 或者退出了应用程序。如果这是由插件创建的最后一个实例, 则调用 NP_Shutdown。(必应翻译)
请务必删除插件实例中存储的任何私有实例特定信息-> pdata。

NPError NPP_Destroy(NPP instance, NPSavedData **save);

该插件可以使用可选的 save 参数来保存数据以供使用相同 url 的新实例重用。数据通过其保存的参数传递给 NPP_New。例如, 视频播放器可以保存要显示的最后一个帧数。当用户返回到该页时, 上一个帧号将传递给插件的新实例, 因此它可以最初显示相同的帧。

请注意, 您不能指望通过这种方式保存数据。如果浏览器重新启动或清除内存, 数据可能会丢失。当 NPP_Destroy 返回时, NPSavedData 结构的 buf 字段的所有权从插件传递到浏览器。

在 NPP_New 中, 保存的参数包含先前保存的该插件实例的数据 (由 NPP_Destroy 保存)。插件必须释放 NPSavedData 的内存和它包含的缓冲区。
在 NPP_Destroy 中, save 参数指定要保存的状态或其他信息, 以便由具有相同 url 的新实例重用。

为了确保在丢弃保存的数据时浏览器不会崩溃或泄漏内存, buf 字段应该是一个分配给 NPN_MemAlloc 的扁平结构 (一个没有分配的子结构的简单构造), 如下面的示例所示:

char* myData = "Here is some saved data.\n";

int32 myLength = strlen(myData) + 1;

*save = (NPSavedData*) NPN_MemAlloc(sizeof(NPSavedData));

(*save)->len = myLength;

(*save)->buf = (void*) NPN_MemAlloc(myLength);

strcpy((*save)->buf, myData);

如果在 NPP_Destroy 中分配已保存的实例数据, 请务必使用此函数分配内存, 因为浏览器可以随时删除与 NPN_MemAlloc 等效的保存数据。(以后就靠必应翻译了!强无敌)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值