NPAPI如何判断NPObject是否为函数?

时间:2012-10-15 10:47:36

标签: npapi

在我的NPAPI插件中,我希望确定NPObject是否是一个函数(即,它是Function的一个实例)。有什么建议我怎么做?

我可以查看NPN_HasMethod()以查看是否有一个名为'call'的方法,但我认为更好的方法是如果我可以执行相当于javascript的“foo instanceof Function”

我试图用我的'foo'NPObject作为范围来调用NPN_Evaluate,以及“this instanceof Function”的脚本,但不幸的是'this'是全局范围,而不是我的'foo'对象。我在这里误解了范围参数的意图吗?我发现的任何例子都在使用窗口。能够使用实际对象(或至少是'this'或对javascript对象的引用)将是更可取的(出于许多其他目的),但是任何确定它是否是函数的好方法都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

我知道的唯一方法是使用NPN_Evaluation将函数注入全局javascript范围,然后使用NPObject调用它。

例如,注入以下函数:

window.isFunction = window.isFunction || function(obj) {
  return typeof obj === 'function';
};

然后你可以使用NPAPI来获取窗口的NPObject,获取“isFunction”属性,然后使用你要检查的函数作为参数对它进行NPN_InvokeDefault。