在我的插件中,我创建了一个线程(在我的例子中使用 pthread)来监听外部事件。当事件发生时,我想与 JavaScript 进行通信。据我了解,我只能在插件线程中调用 NPN_* 方法。因此,我需要在我的线程中使用 NPN_PluginThreadAsyncCall 来调用其他 NPN_* 方法进行 JavaScript 通信。所以一个简单的流程是
我现在面临的问题是,如果外部连续发生,例如两个不同数据输入的事件,有时我会在回调中收到两次相同的数据(在一半的时间内返回两个不同的数据)。我想这是因为 NPN_PluginThreadAsyncCall 是一个异步调用,当两个连续的事件回调时,NPN_PluginThreadAsyncCall 被调用两次,在第一个事件回调到 JavaScript 之前,数据已被第二个调用覆盖。
最初,我要返回的事件数据是一个全局变量。但是我也尝试将其更改为局部变量,它似乎没有帮助。有没有其他方法可以让我的代码成为与 JavaScript 对话的顺序调用?
我做了一些研究,发现了这个,How to callback plugin thread on Safari 5.1 on OSX? . 但我还是不太明白(我在 Windows 上工作)。