如何实现Async NPAPI插件

时间:2012-08-23 16:49:40

标签: npapi

我必须使用普通HTML5 AsyncFileAPI来实现NPAPI Microsoft Gamepad 键事件的回调机制。

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

1 个答案:

答案 0 :(得分:2)

我肯定会建议您使用FireBreath来创建插件;它可以为你解决大部分难题,你可以在how to do async calls上找到教程。

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

一般来说NPN_PluginThreadAsyncCall会这样做;你给它一个函数指针和一个带有你需要的数据的void *它将在主线程上调用你的函数。不幸的是,Windows和Mac上的Safari 5.1似乎已经放弃了对此功能的支持。 Windows上的替代方法是使用LPARAM中的不透明指针为其创建消息HWND和PostMessage。在Mac上,您可以使用PerformSelectorOnMainThread或NSTimer。我不知道如何在linux上做到这一点。

当然,FireBreath会为你处理所有这些,并且只是将回调包装在JSObjectPtr中,可以从任何线程调用它......你调用它,firebreath将为你调用正确的线程。它也适用于IE ......但这取决于你。我试着提供其他选择,因为我写了大部分的FireBreath而且我有点偏颇。

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

祝你好运!