0

私のプラグインは、JavaScript コードを使用して同じページ上の他のプラグインと対話する必要があるため: obj1.invokeWith(obj2)

このメソッドでは、obj2 の NPObject オブジェクトが obj1 に渡されます。obj1 のメソッドで、この NPObject から obj2 の NPP インスタンスを取得するにはどうすればよいですか?

4

1 に答える 1

1

簡単な答え: できません。

別の方法ではありますが、実際にやりたいことをするのに役立つかもしれない長い答え:

「承認された」方法でその情報を取得することはできません。おそらく、データをバリアを越えて void* として渡し、それまたは何かを逆参照する方法を見つけることができますが、それは非常に悪い考えです、IMO.

独自のプラグインの別のインスタンスのデータにアクセスしようとしている場合は、グローバルな std::map (または同様のもの) を使用し、std::map の正しい値にアクセスするためのキーを提供する NPObject メソッドを使用します。 . これを行うときは、グローバル/静的 int を使用し、それをインクリメントしてすべてのインスタンスに一意の ID を与えるだけです。次に、その ID を返す他の NPObject から呼び出すことができる NPObject のプロパティまたはメソッドがあります。ID を取得し、マップでインスタンスを検索して、すぐに使用できます。

最近のブラウザの多くは、プラグインの別のインスタンスに NPObject が渡された場合でも、NPObject を別のもので実際にラップするため、取得したものから元の NPObject を取得することはできず、NPRuntime 呼び出しを行うことができます。以前は FireBreath でそれを行うことができましたが、異なるインスタンス間では機能しなくなりました。

于 2012-07-16T02:18:43.147 に答える