Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用NPN_InvokeDefault()时重新对NPObject进行分级的问题_Javascript_Npapi - Fatal编程技术网

Javascript 调用NPN_InvokeDefault()时重新对NPObject进行分级的问题

Javascript 调用NPN_InvokeDefault()时重新对NPObject进行分级的问题,javascript,npapi,Javascript,Npapi,我已经编写了一个与JavaScript交互的NPAPI插件。我的JavaScript代码加载此插件并对其进行异步调用,提供回调。当需要从我的插件调用回调(JS)时,我调用NPN\u InvokeDefault()。我想传递给JavaScript的参数包括:在传递给NPN\u InvokeDefault()之前,我创建了一个NPObject,并将其转换为NPVariant.我的问题是谁拥有这个对象-我是否有责任通过调用NPN\u ReleaseVariantValue()释放这个对象?或者这是属于

我已经编写了一个与
JavaScript
交互的
NPAPI
插件。我的
JavaScript
代码加载此插件并对其进行异步调用,提供回调。当需要从我的
插件调用回调(JS)时,我调用
NPN\u InvokeDefault()
。我想传递给
JavaScript
的参数包括:在传递给
NPN\u InvokeDefault()之前,我创建了一个
NPObject
,并将其转换为
NPVariant
.
我的问题是谁拥有这个对象-我是否有责任通过调用
NPN\u ReleaseVariantValue()
释放这个对象?或者这是属于
Webkit
(在JS上下文中)?

您可能会想看看我关于这个主题的博文:

简单的回答是,任何你在通话后保留控制权的东西,你都应该释放。因为使用InvokeDefault,您仍然可以控制NPVariant数组的后缀,所以您需要释放所有NPVariant;如果InvokedFault另一端的代码需要保留它,它将根据需要负责保留、复制等

此规则的唯一例外是,当您从NPObject上的函数返回NPVariant时,您将失去对它的控制,浏览器将负责释放它;类似地,浏览器从InvokeDefault(返回值)返回给您的任何内容都由您负责发布


希望这能有所帮助。

感谢您在博客中详细讨论NPAPI。我觉得这很有帮助。还有一个问题。当我执行NPN_InvokeDefault()时,如果我看到webkit代码,在这个函数中,他们正在对我传递的NPObject调用NPN_RetainObject()(当他们为javaScript创建CInstance时)。那么,他们希望在什么时候发布他们的参考资料呢?或者我应该在卸载插件时释放所有引用(通过反复调用NPN_ReleaseObject,直到ref count变为零,并且在我的NPObject上调用NPN_Deallocate)?这是明智的吗?呃,不。那真的会破坏参考计数的整个目的。任何调用Retain的人都有责任调用Release,而您从不为其他事情调用Release。这样做可能会导致崩溃。浏览器将在准备就绪时释放它。还值得注意的是,当您调用NPN_CreateObject时,其中涉及到一个隐式的Retain,因此当您完成此操作时,您应该在其上调用NPN_ReleaseObject。这个规则的例外是WebKit的一些版本,现在是旧版本,没有正确地执行隐式保留;您可以在FireBreath(www.firesreath.org)等项目中找到解决方法