Можно ли сделать плагин (для сафари на Mac) программным или оконным без окон?
Мы делаем плагин для браузера Safari на Mac.
После просмотра по интернету, я обнаружил, что в общем плагины на Mac без окон, но я хочу оконный плагин. Даже в функции NPP_SetWindow я пытался напечатать значение типа переменной (типа NPWindowType) следующим образом:
NPError NPP_SetWindow(NPP instance, NPWindow * pNPWindow)
{
...
printf("....: %d",pNPWindow->type);
...
}
Он печатает2, т.е. его значение 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-> type(в первом фрагменте кода) также печатал 1, т.е. NPWindowTypeWindow означает оконный плагин.
Благодарю.
1 ответ
На Mac нет оконных плагинов; были когда-то, но больше нет.
Теперь у вас есть только модели для рисования, а их три:
- CoreGraphics
- CoreAnimation
- InvalidatingCoreAnimation
Первые два - единственные, которые работают на Safari. Нет способа получить объект окна на Mac. Раньше было несколько хаков, которые вы могли использовать с Quartz и QuickDraw, возможно также с Carbon и CoreGraphics, но эти модели давно ушли в прошлое.
Смотрите также: