1

JavaScript オブジェクトで、 obj.requestFileSystem(LOCAL,5*1024*1024) を呼び出しています。このメソッドは PlainNAPI Plugin に実装されています。次のように、この関数に 1 つの成功コールバックを渡す必要があります......

obj.requestFileSystem(LOCAL,5*1024*1024,initFS); // initFS は、成功コールバックへの引数である JavaScript の関数です。NPAPI では、requestFileSystem が完了するとオブジェクトになり、javascript の initFS 関数を呼び出す必要があります。NPAPIプラグインからjavascriptに戻し、initFS関数を実行する方法。

function initFS(fs) {
alert('Inside the initFS');
alert(fs.root.getFullPath);
}
4

1 に答える 1

2

このプラグインで実際に何をしているのか教えてください。他の誰かに簡単に悪用される可能性のある Web ブラウザーからアクセスできるようにするのと似ているように思えます。

基本的に、関数は NPRuntime 内の関数に到達するときは単なる NPObject です。関数を呼び出すには、その NPObject で NPN_InvokeDefault を実行するだけです。

ほとんどすべての NPN_ 関数を呼び出すには、メイン スレッドにいる必要があることに注意してください。


編集:別のスレッドからコールバックを実行する必要がある場合、最も簡単な解決策はNPN_PluginThreadAsyncCallを使用することです。基本的に、必要なデータを保持するオブジェクトを作成し、そのポインタを void* パラメータとして PluginThreadAsyncCall を呼び出すと、指定した関数に渡されます。

A) ポインタがまだ有効であること、および B) 関数が実行後にそのメモリを解放できることを確認してください。コールバック関数から NPN_InvokeDefault を安全に呼び出すことができます。

NPN_PluginThreadAsyncCallが Safari 5.1 で動作しないように見えるわけではありません。そのサポートが必要な場合、または私が説明したことが意味をなさない場合は、FireBreathを使用してプラグインを構築することを検討してください。これはすべてあなたのために行います。

于 2012-09-05T21:53:19.617 に答える