我想调用js函数在我的plugin.This中显示一些东西,这是我的代码
NPObject* npwindow = NULL;
NPError ret = browser->getvalue(mInstanceForJS, NPNVWindowNPObject, &npwindow);
if (ret != NPERR_NO_ERROR)
return ;
// Get window object.
NPVariant windowVar;
NPIdentifier winID = browser->getstringidentifier("window");
bool bRet = browser->getproperty(mInstanceForJS, npwindow, winID, &windowVar);
if (!bRet)
{
browser->releaseobject(npwindow);
return ;
}
NPObject* window = NPVARIANT_TO_OBJECT(windowVar);
NPVariant voidResponse;
NPVariant elementId;
STRINGZ_TO_NPVARIANT([info UTF8String], elementId);
NPVariant args[] = {elementId};
NPIdentifier funcID= browser->getstringidentifier([funName UTF8String]);
bRet = browser->invoke(mInstanceForJS, window, funcID, args, 1, &voidResponse);
browser->releasevariantvalue(&windowVar);
当调用bRet = browser->invoke(mInstanceForJS,window,funcID,args,1,&voidResponse);,Safari不能responsed.Is出现错误吗?
发布于 2013-01-14 20:47:07
npwindow已经是window对象;您实际上是在查询"window.window“。当然,我不知道为什么这不管用,但这似乎有点奇怪。
这是第一个问题。
问题2是使用STRINGZ_TO_NPVARIANT存储UTF8String的结果。STRINGZ_TO_NPVARIANT不复制内存,因此如果函数想要保存该字符串,您可能会遇到麻烦,因为在自动释放池循环时,它返回的字符串将被释放。当然,这也可能是内存泄漏。无论哪种方式,将字符串传递给浏览器的正确方法是使用NPN_MemAlloc为浏览器分配内存,然后将字符串复制到浏览器中。然后将该指针传递给浏览器。有关更多信息,请参见http://npapi.com/memory。
问题3是您没有告诉我们什么时候运行这段代码;很可能您试图在插件或页面生命周期中过早地运行这段代码,因此它可能无法工作。
还有另一个问题:你所说的"Safari不能回应“是什么意思?忘了语法错误,我不知道你这么说是什么意思。挂起来了吗?bRet是假的吗?你的电脑会突然被冰包裹,从而停止所有的处理吗?如果以上问题没有帮助,请回答这些问题,我会再试一次。
https://stackoverflow.com/questions/14330974
复制相似问题