将函数作为函数javascript中的参数传递给NPAPI

时间:2012-09-05 17:36:12

标签: npapi

在我正在调用的javascript对象上 obj.requestFileSystem(LOCAL,5 * 1024 * 1024)。这个方法在PlainNAPI插件中实现,现在我必须将一个成功回调传递给这个函数,如下所示......

obj.requestFileSystem(LOCAL,5 * 1024 * 1024,initFS); // initFS是javascript中的一个函数,它是成功回调的参数。 在NPAPI中,当requestFileSystem完成时它是一个对象,然后应该调用javascript中的initFS函数。如何从NPAPI插件返回到javascript并执行initFS函数。

function initFS(fs) {
alert('Inside the initFS');
alert(fs.root.getFullPath);
}

1 个答案:

答案 0 :(得分:2)

请不要告诉我你使用这个插件实际做了什么,因为它听起来像是让人们从网页浏览器中访问很容易被其他人滥用的东西。

基本上,当一个函数在NPRuntime内到达你的函数时,它只是一个NPObject;要调用该函数,只需对该NPObject执行NPN_InvokeDefault。

请注意,您必须位于主线程上才能调用几乎所有NPN_函数。


编辑:所以如果你必须从另一个线程进行回调,那么最简单的解决方案就是使用NPN_PluginThreadAsyncCall;基本上你创建一个对象来保存你需要的数据,并用该指针调用PluginThreadAsyncCall作为void *参数,它将被传递给你指定的函数。

确保A)指针仍然有效,并且B)您的函数在运行后能够释放该内存。从回调函数中,您可以安全地调用NPN_InvokeDefault。

NPN_PluginThreadAsyncCall似乎不再适用于Safari 5.1。如果您需要这种支持,或者我所解释的内容没有意义,您可能需要考虑使用FireBreath来构建您的插件;它为你做了所有这些。