1

npapi コード:

bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) {
NPUTF8 *name = browser->utf8fromidentifier(methodName);
if(strcmp(name, plugin_method_name_getAddress) == 0){
    NPString password;
    if(argCount > 0) {
        password = NPVARIANT_TO_STRING(args[0]);
    }
    const char * StringVariable = password.UTF8Characters;
    char* npOutString = (char *)malloc(strlen(StringVariable+1));
    if (!npOutString)
        return false;
    strcpy(npOutString, StringVariable);
    STRINGZ_TO_NPVARIANT(npOutString, *result);
    browser->memfree(name);
    return true;
}
return false;

}

html コード:

function run() {
    var plugin = document.getElementById("pluginId");
    var passwordBeforEncryption =  document.getElementById("passwordFeild");
    if(plugin){
        var value = plugin.getAddress("hello, just test it");
            alert(value);
    }else{
        alert("plugin is null");
    }

}

正しい結果は、「こんにちは、テストしてください」ですが、「こんにちは、テストしてくださいÿÿÿÿ」を返すこともあります。いつもではなく、時々だけです!

助けてください。

4

3 に答える 3

2

エラーはHTMLにありません。NPString構造を参照してください。

typedef struct _NPString {
    const NPUTF8 *UTF8Characters;
    uint32_t UTF8Length;
} NPString;

メンバーUTF8Lengthは文字列の長さを示すため、次のようにする必要があります。

const char * StringVariable = password.UTF8Characters;
char* npOutString  = (char*)browser->memalloc(password.UTF8Length+1);
if (!npOutString) {
    return false;
}
memcpy(npOutString  , password.UTF8Characters, password.UTF8Length);
npOutString[password.UTF8Length] = 0;
于 2012-12-18T02:25:28.590 に答える
1

メモリを正しく割り当てていないようです:

char* npOutString = (char *)malloc(strlen(StringVariable+1));

次のようにする必要があります。

char* npOutString = (char *)malloc(strlen(StringVariable)+1);

長さを修正します。

ただし、ブラウザがメモリを解放できるようにするには、次を使用する必要があります。

char* npOutString = (char *)NPN_MemAlloc(strlen(StringVariable)+1);
于 2014-05-12T23:30:47.467 に答える
0

OK、答えが気に入りました!HTMLコードで:

var value = plugin.getAddress("hello, just test it");

次のようになります。

var value = plugin.getAddress("hello, just test it\0");

文字列の最後に「\0」が必要

于 2012-12-17T09:38:38.450 に答える