【问题标题】:Accessing array element of NPAPI plugin from Javascript从 Javascript 访问 NPAPI 插件的数组元素
【发布时间】:2012-10-23 14:01:48
【问题描述】:

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

var foo_plug = document.getElementById('foo');
var elem = foo_plug.array_p[index];
  1. 调用 NPClass 中的所有方法来访问上述代码的数组元素?
  2. 如何返回 NPAPI 数组索引处的值 插件?
  3. 数组索引如何从 Javascript 传送到 NPAPI 插件?

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

【问题讨论】:

    标签: javascript arrays element npapi


    【解决方案1】:

    首先需要了解的是调用链。让我们看看有问题的行:

    var elem = foo_plug.array_p[index];
    

    这将首先在 NPObject 上为 foo_plug 调用 NPN_GetProperty,并使用转换为字符串“array_p”的 NPIdentifier。

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

    现在,如果返回的 NPObject 是一个实际的 javascript 数组,您不必担心;您可以获取窗口的 NPObject 并使用标识符“Array”且没有参数对其调用 Invoke,它将返回一个带有空数组的 NPObject;你可以用它把东西放进去,然后把它还回去,这样就可以了。

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

    FireBreath 对所有这些选项都有出色的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2013-08-20
      • 2015-03-06
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多