从Javascript访问NPAPI插件的数组元素

时间:2012-10-23 14:01:49

标签: javascript arrays element npapi

我创建了一个NPAPI插件,并希望从Javascript中访问插件中的数组元素。我使用的javascript是以下一个:

var foo_plug = document.getElementById('foo');
var elem = foo_plug.array_p[index];
  1. 调用NPClass中的所有方法来访问上面显示的代码的数组元素?
  2. 如何返回NPAPI数组索引处的值 插件?
  3. 如何将数组索引从Javascript传送到NPAPI 插件?
  4. PS:我在访问插件中的变量时调用了NPClass的hasProperty和getProperty方法并且工作正常。

1 个答案:

答案 0 :(得分:1)

您需要了解的第一件事是调用链。让我们来看看有问题的一行:

var elem = foo_plug.array_p[index];

这要做的是首先在NPObject上为foo_plug调用NPN_GetProperty,其NPIdentifier转换为字符串“array_p”。

接下来会发生什么,取决于返回的内容;如果返回一个字符串,index将成为该字符串的索引。如果它是一个int,它会给你一个错误。另一方面,如果它是NPObject,则下一个调用将是该NPObject上的NPN_GetProperty,其NPIdentifier将是IntIdentifier(使用NPN_GetIntIdentifier)或字符串标识符,其数字为字符串(使用NPN_IdentifierIsString来确定哪个)

现在,如果返回的NPObject是一个实际的javascript数组,你不必担心;你可以获得NPObject for window并使用标识符“Array”调用Invoke并且没有参数,它将返回一个空数组的NPObject;你可以使用它来把东西放进去并返回它,这样可以正常工作。

或者,您可以返回支持“length”属性NPN_Enumerate的NPObject,并且可以智能地处理数字字符串标识符或intidentifier(实际上您需要处理这两者,因为某些浏览器使用每种类型)并且如果它起作用就像一个javascript数组,你可能不会知道它的区别。

FireBreath非常支持所有这些选项。