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

从Javascript访问NPAPI插件的数组元素,javascript,arrays,element,npapi,Javascript,Arrays,Element,Npapi,我创建了一个NPAPI插件,并希望从Javascript访问插件中的数组元素。我使用的javascript如下所示: var foo_plug = document.getElementById('foo'); var elem = foo_plug.array_p[index]; 为访问上面所示代码的数组元素,调用了NPClass中的哪些方法 如何返回NPAPI数组索引处的值 插件 数组索引如何从Javascript传递到NPAPI 插件 PS:我在访问插件中的变量时调用了NPClass的h

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

var foo_plug = document.getElementById('foo');
var elem = foo_plug.array_p[index];
  • 为访问上面所示代码的数组元素,调用了NPClass中的哪些方法
  • 如何返回NPAPI数组索引处的值 插件
  • 数组索引如何从Javascript传递到NPAPI 插件

  • PS:我在访问插件中的变量时调用了NPClass的hasProperty和getProperty方法,并且工作正常

    您首先需要了解的是呼叫链。让我们看看这句话:

    var elem = foo_plug.array_p[index];
    
    这将要做的是首先使用转换为字符串“array_p”的NPIdentifier调用foo_plug的NPObject上的NPN_GetProperty

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

    现在,如果返回的NPObject是一个实际的javascript数组,那么您不必担心这一点;您可以获取window的NPObject,并使用标识符“Array”对其调用Invoke,而不使用任何参数,它将返回一个带有空数组的NPObject;你可以用它把东西放进去,然后把它退回,这样会很好

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

    对所有这些选项都有极好的支持