0

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

在这个方法中,obj2 的一个 NPObject 对象被传递给 obj1。如何在 obj1 的方法中从这个 NPObject 中获取 obj2 的 NPP 实例?

4

1 回答 1

1

简短的回答:你不能。

更长的答案实际上可能会帮助您做您想做的事情,尽管方式不同:

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

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

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

于 2012-07-16T02:18:43.147 回答