如何从NPObject获取关联的NPP实例

时间:2012-07-15 14:47:57

标签: c++ npapi

因为我的插件需要使用JavaScript代码与同一页面上的其他插件进行交互:obj1.invokeWith(obj2)

在此方法中,obj2的NPObject对象被传递给obj1。如何在obj1?

的方法中从这个NPObject中获取obj2的NPP实例

1 个答案:

答案 0 :(得分:1)

简短回答:你不能。

更长的答案实际上可以帮助你做你想做的事,虽然以不同的方式:

您无法以任何“批准”的方式获取该信息。您可能会找到一些方法将数据作为void *传递到屏障上并取消引用它,但这将是一个非常糟糕的主意,IMO。

如果您尝试访问自己插件的另一个实例中的数据,那么只需使用全局std :: map(或类似的东西),并使用NPObject方法为您提供访问std正确值的密钥::地图。当我这样做时,我只使用一个global / static int并递增它以给每个实例一个唯一的id,然后我在NPObject上有一个属性或方法,可以从返回该id的另一个NPObject调用。您获取ID,在地图中查找实例,然后离开。

许多现代浏览器实际上将NPObject包装在其他东西中,即使它被传递到插件的另一个实例,因此您无法从您获得的NPObject中获取原始NPObject,您只需对其进行NPRuntime调用即可。我们曾经能够使用FireBreath来做到这一点,但它不再适用于不同的实例。