2012-06-27 25 views
0

我得到一個JavaScript錯誤方法:Error calling method on NPObject在Chrome &火狐在XP上我的NPAPI插件調用方法時。在Windows 7上使用相同的瀏覽器運行相同的代碼是成功的。編寫腳本插件:錯誤呼籲NPObject

我已經建立了使用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); 
} 
+0

格式的代碼相當understable狀態,漂亮嗎? –

+0

林不知道如何格式化我的代碼有什麼問題? – hapyfishrmn

+1

已經爲你做了這個... –

回答

1

的(諷刺)真棒(/諷刺)關於NPAPI的是,如果什麼出錯通過這個調用,你會自動得到那個錯誤信息,即使這個插件另外試圖用NPN_SetException設置一個異常。

我的第一個猜想是,你編譯代碼比針對Windows XP中的Windows後續版本我不確定那會不會產生這個問題。我從來沒有見過你描述的問題,並且我已經在xp,vista和7上運行了插件,沒有任何問題。您也可以嘗試使用FireBreath插件,並查看問題是否存在。

我建議你附上一個調試器,並設置一些斷點。從NPN_GetValue開始,確保它實例化NPObject,然後在NPObject的HasMethod和Invoke方法中設置斷點並查看命中。可能有些東西會告訴你實際發生了什麼,或者至少告訴你哪些代碼正在或未被擊中。

+1

添加預處理器定義:/ D「WIN32」做了訣竅。謝謝 – hapyfishrmn

+0

很高興你明白了! – taxilian