Мы создаем плагин для браузера сафари на 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 т.е. означает оконного плагин.
Спасибо.
Привет @taxilian, спасибо за ваш ответ. Не могли бы вы поделиться примером кода «Вы можете получить CGContextRef, а затем создать свой собственный заставку NSWindow и NSView и отобразить их в CGContextRef», прочитанный из одной из вышеперечисленных ссылок? – user2181750
Кроме того, есть ли способ получить NSWindow из объекта CGContextRef? – user2181750
Вы не можете получить NSWindow из CGContextRef. Предвосхищая будущие вопросы: нет способа * получить NSWindow броузера в процессе плагина. Речь идет не о том, чтобы быть умным или найти лазейку, вы не можете ее получить, потому что указатели на окна OS зависят от процесса, и вы находитесь в другом процессе (как я сказал в ответ на другой ваш вопросов). То, что вы пытаетесь сделать, не может быть сделано. Я рекомендую задать вопрос, который выражает цель более высокого уровня, поэтому кто-то может попытаться указать вам в правильном направлении, а не спрашивать о деталях по неправильному пути. – smorgan