0

Error calling method on NPObjectXP 上の Chrome および Firefox で NPAPI プラグインのメソッドを呼び出すと、JavaScript エラーが発生します。同じブラウザーを使用して Windows 7 で同じコードを実行すると、成功しました。

NPAPI を使用してスクリプト可能なプラグインを作成しました。これまでのところInvoke、スクリプト可能なオブジェクトのメソッドにデバッグできます。しかし、それが終わった後、私は私がコントロールできるとは思いません。
誰にもアイデアはありますか?これは Windows XP だけの問題ですか?

bool MY_ScriptableObject::Invoke(NPObject*        npobj,   
                                 NPIdentifier     name,    
                                 const NPVariant* args,    
                                 uint32_t         argCount,
                                 NPVariant*       result)  
{ 
bool                    rc   = true;
char*                   wptr = NULL;

    rc = false;
    wptr = NULL;

    if  (name == NPN_GetStringIdentifier("getVersion"))
        {
        wptr = (NPUTF8*)NPN_MemAlloc(strlen("version:1.0.1") + 1); //Should be freed by browser
        if  (wptr != NULL)                                                      
            {
            rc = true;
            memset(wptr,
                   0x00,
                   strlen("version:1.0.1")+1);
            memcpy(wptr,
                   "version:1.0.1",
                   strlen("version:1.0.1"));
            STRINGZ_TO_NPVARIANT(wptr,
                                 *result);
            }
        }
    return (rc);
}

私が実行しているHTML関数は次のとおりです。

function Version()
{
var plugin = document.getElementById("plugin");
if (plugin == undefined)
    {
    alert("plugin failed");
    return;
    }
var text = plugin.getVersion();  //Error happens at this line
alert(text);
}
4

1 に答える 1

1

現在のバージョンのブラウザーでの NPAPI の (皮肉) 素晴らしい (/皮肉) 点は、呼び出しに問題が発生した場合、プラグインがNPN_SetExceptionで例外を設定しようとした場合でも、自動的にそのエラー メッセージが表示されることです。

私の最初の推測では、Windows XP よりも新しいバージョンの Windows を対象としてコードをコンパイルしたということです。それがこの問題を引き起こすかどうかはわかりません。あなたが説明している問題を見たことがありません.XP、Vista、および7でプラグインを問題なく実行しています. FireBreathプラグインを試してみて、そこで問題が発生するかどうかを確認することもできます。

デバッガーをアタッチして、いくつかのブレークポイントを設定することをお勧めします。NPN_GetValue で開始し、NPObject がインスタンス化されていることを確認してから、NPObject の HasMethod メソッドと Invoke メソッドにブレークポイントを設定し、何がヒットするかを確認します。実際に何が起こっているのか、または少なくともどのコードが影響を受けているか、または影響を受けていないかを示す何かがそこにある可能性があります。

于 2012-06-28T05:24:38.940 に答える