我试图创建一个NPAPI插件来收听macbook上的Media Keys并将其传递给javascript以控制pandora或soundcloud等内容。我使用的是Spotify的SPMediaKeyTap库,它只包含在单独的线程上运行的CGEventTap。
我的问题是我使用npn_invoke回调javascript。这可以正常工作,但是当它从CGEventTap回调触发时,它会崩溃插件。我意识到这需要从插件线程运行,并且我已经尝试通过使用[NSObject performSelectorOnMainThread]和[NSObject performSelector:onThread]将其传递回主线程,并且我已经存储了该线程离开主插件线程创建方法。任何npn调用都会导致这两种解决方案崩溃。在处理导致状态对于NPN浏览器交互调用无效的CGEventTap事件时是否还有其他事情发生?
答案 0 :(得分:0)
不要试图通过像你一样保存线程来猜测线程模型;只需使用performSelectorOnMainThread来调用NPN方法。我一直这样做,并且工作正常,所以我猜你的跨线程编组方法并没有按照它需要的方式工作。