2015-10-27 3 views
0

Мы создаем плагин для браузера сафари на Mac.Может ли плагин (для сафари на Mac) быть оконным или оконным программным путем?

После просмотра через Интернет я обнаружил, что в целом плагины на Mac без окон, но я хочу оконный плагин. Даже в функции NPP_SetWindow я пытался напечатать значение переменной типа (который имеет тип NPWindowType) следующим образом:

NPError NPP_SetWindow(NPP instance, NPWindow * pNPWindow) 
{ 
... 
printf("....: %d",pNPWindow->type); 
... 
} 

Он печатает т.е. его значение NPWindowTypeDrawable означает без окон.

Кроме того, я прочитал следующий код где-то:

NPError NPP_New(NPMIMEType pluginType, 
     NPP instance, uint16 mode, 
     int16 argc, char *argn[], 
     char *argv[], NPSavedData *saved) 
{ 
... 
NPError result = NPN_SetValue(instance, NPPVpluginWindowBool, (void*)false); 
} 

Здесь он говорит о том, что плагин может быть сделано без окон, передавая значение для NPPVpluginWindowBool ​​ в ложной в вызове функции NPN_SetValue. Если плагин не выполняет этот вызов, он считается оконным плагином. Но затем он также говорит, что «плагины на Mac OS X всегда без окон». Я еще не был уверен в этом.

Мой вопрос, будет прохождение истинного значения для NPPVpluginWindowBool ​​ здесь делают плагин оконным? Я еще не пробовал.

Пожалуйста, подсказывают, как сделать это с окошками плагин ли программно или любой другой путь вокруг так, что pNPWindow-> типа (в первом фрагменте кода) также будет печатать 1 NPWindowTypeWindow т.е. означает оконного плагин.

Спасибо.

ответ

1

На Mac нет оконных плагинов; были когда-то, но их уже нет.

Теперь вы просто рисовать модели, и есть три:

  • CoreGraphics
  • CoreAnimation
  • InvalidatingCoreAnimation

Первые два являются единственными, которые работают на сафари. Невозможно получить объект Windows на Mac. Раньше было несколько хаков, которые вы могли бы использовать с Quartz и QuickDraw, возможно, также с Carbon и CoreGraphics, но эти модели уже давно ушли.

Смотрите также:

+0

Привет @taxilian, спасибо за ваш ответ. Не могли бы вы поделиться примером кода «Вы можете получить CGContextRef, а затем создать свой собственный заставку NSWindow и NSView и отобразить их в CGContextRef», прочитанный из одной из вышеперечисленных ссылок? – user2181750

+0

Кроме того, есть ли способ получить NSWindow из объекта CGContextRef? – user2181750

+1

Вы не можете получить NSWindow из CGContextRef. Предвосхищая будущие вопросы: нет способа * получить NSWindow броузера в процессе плагина. Речь идет не о том, чтобы быть умным или найти лазейку, вы не можете ее получить, потому что указатели на окна OS зависят от процесса, и вы находитесь в другом процессе (как я сказал в ответ на другой ваш вопросов). То, что вы пытаетесь сделать, не может быть сделано. Я рекомендую задать вопрос, который выражает цель более высокого уровня, поэтому кто-то может попытаться указать вам в правильном направлении, а не спрашивать о деталях по неправильному пути. – smorgan

Смежные вопросы