NPAPIを使用してJavascriptでオブジェクトをコールバックしています。この呼び出しの前に、私が呼び出す関数がJavaScriptで関数を適切に呼び出す結果となりましたが、NPN_Invoke
呼び出しでは失敗します。NPNInvoke - プラグインデータをブラウザに戻す
コードスニペット:
sBrowserFuncs->releaseobject(object_temp);
object_temp = NPVARIANT_TO_OBJECT(args[0]);
sBrowserFuncs->retainobject(object_temp);
if (send_msg1(sBrowserFuncs, instance, msg_rcv, NPVARIANT_TO_OBJECT(args[0]), msg, name_id))
sendmsg1
は、新しいスレッドを生成し、このスレッドはmsg_rcv
バックを呼び出します。それは正常に生成されたスレッドがメインスレッド関数を呼び出すのは間違いの理由です。 は... NPN_Invoke
へ 彼女の呼び出しはinstance
object_temp
で
NPVariant from;
STRINGZ_TO_NPVARIANT(sdata->from, from);
NPIdentifier methodId = NPN_GetStringIdentifier("new_msg");
int res = NPN_Invoke(sdata->instance, object_temp, methodId, &from, 1, &result);
sdata->instance
マッチと呼ばれて成功した場合には、それは1.
を返しながら、それは、0を返し
を格納された最後と呼ばれるオブジェクトでありますこの場合、NPN_Invoke
は0を生成します。
これはまさに正しいことです。ただし、MacではPluginThreadAsyncCallが常に信頼できるとは限りません。プラットフォームによっては、他の回避策を使用する必要があります。これは、FireBreath(http://firebreath.org)フレームワークが非常に人気がある理由の1つです。なぜなら、このようなスレッド問題のほとんどすべてを抽象化しているからです。 – taxilian