Обработка CGEventTaps в плагине NPAPI - PullRequest
0 голосов
/ 28 декабря 2011

Я пытаюсь создать плагин NPAPI для прослушивания Media Keys на macbook и передать его в javascript для управления такими вещами, как pandora или soundcloud.Я использую библиотеку Spotify SPMediaKeyTap, которая просто оборачивает CGEventTap, работающий в отдельном потоке.

Моя проблема в том, что я использую npn_invoke для обратного вызова javascript.Это работает нормально, но когда он запускается из-за обратного вызова CGEventTap, происходит сбой плагина.Я понимаю, что это нужно запустить из потока подключаемого модуля, и я попытался передать его обратно в основной поток, используя [NSObject executeSelectorOnMainThread] и [NSObject executeSelector: onThread] с потоком, который я сохранил в главном потоке.Плагин темы создания метода.Оба эти решения по-прежнему дают сбой при любом вызове npn.Есть ли что-то еще, что происходит при обработке события CGEventTap, которое вызывает недопустимое состояние для вызовов взаимодействия с браузером NPN?

1 Ответ

0 голосов
/ 10 января 2012

Не пытайтесь угадать модель потока, сохранив поток как вы; просто используйте executeSelectorOnMainThread для вызова методов NPN. Я делаю это все время, и это прекрасно работает, поэтому я предполагаю, что что-то с вашим методом межпоточного маршалинга не работает так, как нужно.

...