0

私はスクリプト可能なプラグインを作成しようとしています。以下の mozilla の例をガイドとして使用し、firebreath を見てコードがどのようにラップされているかを確認しています。javascript への戻り値に行き詰まっています。

Mozilla のスクリプト可能な例

JavaScriptが私の関数を呼び出すと、Allocate、HasProperty、HasMethod、Invokeがすべて呼び出されます。Invoke で結果を返しますが、javascript 変数が定義されていないか、結果を変更するとブラウザがクラッシュします。

    STRINGZ_TO_NPVARIANT(_strdup("Hello World"), *result);
4

1 に答える 1

1

STRINGZ_TO_NPVARIANTは実際には少し危険です。NPVariantオブジェクトに文字列を挿入すると、そのメモリの所有権がブラウザに付与されます。ただし、NPN_MemAllocを使用してそのメモリを割り当てなかった場合、そのメモリを解放しようとすると爆発する可能性があります(クラッシュの原因である可能性があります)。

STRINGZ_TO_NPVARIANTが実際に行っていることを確認し、それがどのように機能するかを理解するまでは使用しないでください。それまでは、理解を深めるために、手作業で手順を実行してみてください。NPN_MemAllocを使用してメモリを割り当ててから、文字列をそれにstrcpyします。私はこれがあなたの問題を解決するに違いない。理解したら、独自のインライン関数を作成するか、コードを再度クリーンアップしないようにします。

于 2011-12-29T07:56:06.297 に答える