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

How to get the associated NPP instance from NPObject

本文关键字:NPP 实例 关联 获取 NPObject      更新时间:2023-10-16

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

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

简单回答:你不能。

更长的答案可能会帮助你做你想做的事,尽管方式不同:

你不能以任何"批准"的方式获得这些信息。你可能会找到一些方法,将数据作为一个空白通过屏障*并取消引用它或其他什么,但这将是一个非常糟糕的主意,IMO.

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

许多现代浏览器实际上会将你的NPObject封装在其他东西中,即使它被传递到插件的另一个实例,所以你不能从你得到的那个实例中获得原始的NPObject,你可以对它进行NPRuntime调用。我们过去可以用FireBreath做到这一点,但它不再在不同的实例之间工作。