私のプラグインでは、外部イベントをリッスンするスレッドを作成します(私の場合はpthreadを使用します)。イベントが発生したら、JavaScriptに通信したいと思います。私が理解している限り、プラグインスレッドでNPN_*メソッドを呼び出すことしかできません。その結果、JavaScript通信用に他のNPN_ *メソッドを呼び出すために、スレッドでNPN_PluginThreadAsyncCallを利用する必要があります。つまり、単純なフローは
私が今直面している問題は、外部が連続して発生する場合、たとえば、異なるデータ入力を持つ2つのイベントが発生した場合、コールバックで同じデータを2回受信することがあります(2つの異なるデータが返される時間の半分)。NPN_PluginThreadAsyncCallが非同期呼び出しであるためだと思います。2つの連続したイベントがコールバックすると、NPN_PluginThreadAsyncCallが2回呼び出され、最初のイベントのJavaScriptへのコールバックが実際に発生する前に、データが2番目の呼び出しによってオーバーライドされます。
最初に、返したいイベントデータはグローバル変数です。しかし、私もそれをローカル変数に変更しようとしましたが、役に立たなかったようです。コードをJavaScriptと通信するためのシーケンシャル呼び出しにする他の方法はありますか?
私はいくつかの調査を行い、これを見つけました、OSX上のSafari5.1でプラグインスレッドをコールバックする方法は?。しかし、私はまだ完全には理解していません(私はWindowsで作業しています)。