编写脚本插件:错误调用方法上NPObject(Scriptable plugin: Error ca

2019-10-31 19:44发布

:我得到一个JavaScript错误Error calling method on NPObject调用在Chrome和Firefox在XP上我的NPAPI插件的方法时。 运行使用相同的浏览器在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);
}

Answer 1:

在浏览器的当前版本(讽刺)真棒(/讽刺)关于NPAPI是,如果出现任何错误与呼叫你自动获得该错误信息,即使插件以其他方式试图设定NPN_SetException异常。

我的第一个猜测是,你编译代码比针对Windows XP中的Windows后续版本 我不知道是否会产生这种问题或没有。 我从来没见过你所描述的问题,我已经得到了在XP,Vista和Windows 7没有麻烦运行插件。 您也可以尝试用打FireBreath插件,看看那里发生与否的问题。

我建议你附上一个调试器,并设置一些断点。 开始在NPN_GetValue,并确保它的实例您NPObject,然后设置你的NPObject的HasMethod断点和调用方法,看看被击中。 可能东西在里面会告诉你什么是真正发生的事情,或者至少告诉你什么代码或没有击中。



文章来源: Scriptable plugin: Error calling method on NPObject