2015-10-31 4 views
0

Я делаю плагин для сафари на Mac. Я застрял в том, как создать окно над окном браузера, на котором можно отобразить видео.Как создать окно в браузере с ручкой NSWindow?

Раньше мы использовали модель событий Cocoa, под которой указатель окна получен в NPWindow в NPP_SetWindow функция равна нулю. Затем мы перешли к модели Carbon Event и мы получили указатель на NP_CGContext через окно указатель, присутствующий в NPWindow структуре, с помощью которого мы получили указатель на WindowRef и получили указатель NSWindow следующим образом:

NP_CGContext* npContext = (NP_CGContext*)npWindow->window; 
WindowRef window = npContext->window; 
NSWindow* browserWindow = [[[NSWindow alloc] initWithWindowRef:window] autorelease]; 

Нашей потоковая система принимает указатель до NSWindow. Мы не знаем, как создать окно в нашем пространстве браузера.

Так что любая помощь в отношении создания окна будет оценена по достоинству.

+0

Я не могу вам достаточно сообщить, что предпосылка вашей серии вопросов - желание сделать плагин NPAPI для потокового видео - глубоко и фундаментально испорчена. Chrome удалил поддержку плагинов NPAPI, Mozilla объявила, что удалит поддержку к концу 2016 года, и пока Apple не объявила о каких-либо планах, которые они обычно не знают для расширенной поддержки устаревших технологий. Вы выбрали технологию, которая, по всей вероятности, будет продолжать существовать для этого проекта. Я настоятельно рекомендую использовать веб-стандарты для видео или создавать приложение, а не плагин. – smorgan

ответ

1

Наш потоковый двигатель принимает указатель на NSWindow. Мы не знаем, как создать окно в нашем пространстве браузера.

Вы не должны этого делать, как описано в previousanswers.

Потоковый движок, для которого требуется указатель NSWindow, очень плохо подходит для создания плагина NPAPI. Вы должны, если это вообще возможно, искать что-то, что берет или обменивает CALayer, или не удается, что может рисовать кадры в CGContextRef (но это будет намного медленнее в плагинах вне процесса).

Если вы абсолютно должны использовать NSWindow, вам нужно будет создать новый в своем процессе плагина, который полностью не связан с окном браузера и отобразит его где-то на экране. Пользовательский интерфейс будет относительно низким, потому что он не будет перемещаться с окном, может оказаться за окном браузера и т. Д. Это явно не одобрено поставщиками браузеров. Но если у вас нет выбора, кроме использования NSWindow, то это ваш единственный вариант с современными браузерами.

+0

Он абсолютно прав (если вам почему-то нужно второе мнение) – taxilian

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