如何实现异步NPAPI插件

如何实现异步NPAPI插件,npapi,Npapi,我必须使用普通的NPAPI实现HTML5异步文件api。还有用于Microsoft Gamepad按键事件的回调机制 我面临的问题是如何实现threadcallasync,并从普通的NPAPI插件向javascript发送数据。一些有用的链接或工作代码将不胜感激。我是NPAPI插件的新手。threadcallasync我必须在Linux中实现,我已经看到了一些在windows中实现的链接。我绝对推荐使用它来创建插件;它将为您解决大多数困难的问题,您可以在上找到教程 如果您选择不这样做,基本上您只

我必须使用普通的
NPAPI
实现
HTML5异步文件api
。还有用于Microsoft Gamepad按键事件的回调机制


我面临的问题是如何实现
threadcallasync
,并从普通的NPAPI插件向javascript发送数据。一些有用的链接或工作代码将不胜感激。我是NPAPI插件的新手。threadcallasync我必须在Linux中实现,我已经看到了一些在windows中实现的链接。

我绝对推荐使用它来创建插件;它将为您解决大多数困难的问题,您可以在上找到教程

如果您选择不这样做,基本上您只需传入一个javascript函数,它在NPAPI中将是一个NPObject,然后当您的操作完成时,在回调NPObject上使用NPN_invokedFault。当然,您需要在主线程上执行此操作,这将需要某种方法向主线程发送消息,以通知它进行调用

一般来说,NPN_PluginThreadAsyncCall就是这样做的;您给它一个函数指针和一个void*,其中包含您需要的数据,它将在主线程上调用您的函数。不幸的是,windows和mac上的Safari 5.1似乎都放弃了对该功能的支持。windows上的另一种方法是使用LPRAM中的不透明指针创建消息HWND和PostMessage。在Mac上,您可以只使用PerformSelectorOnMainThread或NSTimer。我不知道如何在linux上做到这一点

当然,FireBreath会为您解决所有这些问题,只需将回调封装在一个JSObjectPtr中,该JSObjectPtr可以从任何线程调用。。。你呼叫它,firebreath将在正确的线程上为你呼叫。它也将在IE上工作。。。但这取决于你。我试着给出其他的选择,因为我写了大部分的FireBreath,我有点偏颇

(仅仅因为我有偏见并不意味着我错了)


祝你好运

多谢你,泰克斯林。我只需要使用普通的NPAPI,我已经实现了异步调用。简单的NPAPI如何像FireWidth一样调用特定的线程,并在JSObjectPtr中结束回调。再次感谢。