如何在浏览器中创建一个具有NSWindow句柄的窗口?

时间:2015-10-31 13:51:26

标签: nswindow npapi browser-plugin videodisplay

我正在为mac上的safari制作一个插件。我坚持如何在浏览器的窗口上创建一个窗口,可以在其上显示视频。

之前,我们使用Cocoa Event模型,在NPWindow函数中NPP_SetWindow中收到的窗口指针为空。然后我们切换到Carbon Event模型,我们通过NPWindow结构中存在的窗口指针获得指向NP_CGContext的指针,使用它我们获得指向WindowRef的指针并得到一个指向NSWindow的指针如下:

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

我们的流媒体引擎接受指向NSWindow的指针。我们不知道如何在浏览器空间中创建窗口。

所以关于窗口创建的任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

  

我们的流媒体引擎接受指向NSWindow的指针。我们不知道如何在浏览器空间中创建窗口。

您不应该执行此操作,如previous answers中所述。

需要NSWindow指针的流引擎非常不适合制作NPAPI插件。如果可能的话,你应该寻找能够使用或出售CALayer的东西,或者失败的东西,它可以将帧绘制到CGContextRef中(但是这会在进程外插件中慢得多)。

如果您绝对必须使用NSWindow,那么您需要在插件流程中创建一个与浏览器窗口完全无关的新窗口,并将其显示在屏幕上的某个位置。用户体验相对较差,因为它不会随窗口移动,最终会落后于浏览器窗口等等。浏览器供应商明确表示不鼓励这样做。但如果您别无选择,只能使用NSWindow,那么这是您使用现代浏览器的唯一选择。