Mac OSX, модель событий Cocoa в плагинах NPAPI, NSView и Out of process - PullRequest
1 голос
/ 18 ноября 2010

Что ж, в настоящее время в chrome есть неработающие плагины.и Firefox 4 будет использовать ту же модель.

Это означает, что процесс плагина теперь отделен от процесса браузера.Процесс плагина может вообще не иметь окна.

Мой плагин основан на NSView.

До модели событий какао, когда я могу получить доступ к NSWindow в процессе браузера, все, что мне нужно сделать, это просто добавить my_view в качестве подпредставленияContentView в окне.

[[the_window contentView] addSubview:my_view] 

Мне НЕ нужно обрабатывать события самостоятельно.Это сработало само по себе.

Но теперь я преобразую NPCocoaEvents в NSEvents в коде процесса обработки событий.

Нужно ли менять его самому?

Также какой-то экземпляриз NSEvents, я не могу их сделать, например, колесико мышиных событий.

Что мне делать?

Неправильно ли я подхожу?

Просьба просветитья.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2010

Должен ли я изменить это сам?

Если вы планируете использовать метод пересылки NSEvents в существующий NSView, тогда да; нет способа получить доступ к оригинальным NSEvents. Они не существуют в процессе плагина.

Другим вариантом было бы отказаться от попыток использовать встроенные элементы управления, а также выполнить собственный рисунок и обработку событий. Так работает большинство плагинов NPAPI.

Третий вариант - открыть отдельное окно для содержимого вашего плагина и поместить свое представление в это окно. Технически это не поддерживается NPAPI и не будет идеальным, но это может быть краткосрочный способ заставить ваш плагин работать, пока вы исследуете долгосрочные варианты.

Я ошибся?

Да, то, что вы делали раньше, было неподдерживаемым взломом, а не тем, как NPAPI предназначался для использования. Добавление представления в окно браузера предполагает наличие в иерархии представлений браузера сведений о реализации, которые могут быть изменены в любое время.

1 голос
/ 02 декабря 2010

Одним из вариантов будет использование FireBreath фреймворка для создания вашего плагина, поскольку в нем уже есть много абстракций для согласования модели событий и чертежей, а также абстракция событий.Это довольно просто встать и уйти.

...