0

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

NPWindow之前,我们使用 Cocoa Event 模型,在该模型下,函数中接收到的窗口指针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. 我们不知道如何在浏览器空间中创建一个窗口。

因此,我们将不胜感激有关创建窗口的任何帮助。

4

1 回答 1

1

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

正如前面的 答案中所解释的,您不应该这样做。

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

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

于 2015-10-31T15:52:06.360 回答