我正在尝试创建一个 NPAPI 插件来收听 macbook 上的媒体密钥并将其传递给 javascript 以控制诸如潘多拉或 soundcloud 之类的东西。我正在使用 Spotify 的 SPMediaKeyTap 库,它只是包装了在单独线程上运行的 CGEventTap。
我的问题是我使用 npn_invoke 来回调 javascript。这正常工作,但是当它从 CGEventTap 回调触发时,它会使插件崩溃。我意识到这需要从插件线程运行,并且我尝试通过使用 [NSObject performSelectorOnMainThread] 和 [NSObject performSelector:onThread] 将其传递回主线程以及我存储在主线程中的线程插件线程创建方法。这两种解决方案在任何 npn 调用时仍然会崩溃。在处理导致状态对 NPN 浏览器交互调用无效的 CGEventTap 事件时,是否还有其他事情发生?