首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >NPAPI插件在safari中不能调用js函数?

NPAPI插件在safari中不能调用js函数?
EN

Stack Overflow用户
提问于 2013-01-15 04:01:21
回答 1查看 310关注 0票数 0

我想调用js函数在我的plugin.This中显示一些东西,这是我的代码

代码语言:javascript
代码运行次数:0
运行
复制
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出现错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-15 04:47:07

npwindow已经是window对象;您实际上是在查询"window.window“。当然,我不知道为什么这不管用,但这似乎有点奇怪。

这是第一个问题。

问题2是使用STRINGZ_TO_NPVARIANT存储UTF8String的结果。STRINGZ_TO_NPVARIANT不复制内存,因此如果函数想要保存该字符串,您可能会遇到麻烦,因为在自动释放池循环时,它返回的字符串将被释放。当然,这也可能是内存泄漏。无论哪种方式,将字符串传递给浏览器的正确方法是使用NPN_MemAlloc为浏览器分配内存,然后将字符串复制到浏览器中。然后将该指针传递给浏览器。有关更多信息,请参见http://npapi.com/memory

问题3是您没有告诉我们什么时候运行这段代码;很可能您试图在插件或页面生命周期中过早地运行这段代码,因此它可能无法工作。

还有另一个问题:你所说的"Safari不能回应“是什么意思?忘了语法错误,我不知道你这么说是什么意思。挂起来了吗?bRet是假的吗?你的电脑会突然被冰包裹,从而停止所有的处理吗?如果以上问题没有帮助,请回答这些问题,我会再试一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14330974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档