Можно ли сделать плагин (для сафари на 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, но эти модели давно ушли в прошлое.

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

Другие вопросы по тегам