私のプラグインは、JavaScript コードを使用して同じページ上の他のプラグインと対話する必要があるため: obj1.invokeWith(obj2)
このメソッドでは、obj2 の NPObject オブジェクトが obj1 に渡されます。obj1 のメソッドで、この NPObject から obj2 の NPP インスタンスを取得するにはどうすればよいですか?
簡単な答え: できません。
別の方法ではありますが、実際にやりたいことをするのに役立つかもしれない長い答え:
「承認された」方法でその情報を取得することはできません。おそらく、データをバリアを越えて void* として渡し、それまたは何かを逆参照する方法を見つけることができますが、それは非常に悪い考えです、IMO.
独自のプラグインの別のインスタンスのデータにアクセスしようとしている場合は、グローバルな std::map (または同様のもの) を使用し、std::map の正しい値にアクセスするためのキーを提供する NPObject メソッドを使用します。 . これを行うときは、グローバル/静的 int を使用し、それをインクリメントしてすべてのインスタンスに一意の ID を与えるだけです。次に、その ID を返す他の NPObject から呼び出すことができる NPObject のプロパティまたはメソッドがあります。ID を取得し、マップでインスタンスを検索して、すぐに使用できます。
最近のブラウザの多くは、プラグインの別のインスタンスに NPObject が渡された場合でも、NPObject を別のもので実際にラップするため、取得したものから元の NPObject を取得することはできず、NPRuntime 呼び出しを行うことができます。以前は FireBreath でそれを行うことができましたが、異なるインスタンス間では機能しなくなりました。