一个插件,在windows上的firefox中运行良好,现在正在Mac上移植到safari上。我们正在使用Xcode进行开发。我们希望在safari浏览器中有一个可以显示视频的窗口。我阅读了关于NSwindow在NPP_SetWindow函数中使用的代码,如下所示:
NPError NPP_SetWindow(NPP instance, NPWindow* npWindow)
{
// Get a Cocoa window reference of the browser window
NP_CGContext* npContext = (NP_CGContext*)npWindow->window;
WindowRef window = npContext->window;
NSWindow* browserWindow = [[[NSWindow alloc] initWithWindowRef:window] autorelease];
// Get a Cocoa reference of my carbon window
// yourCarbonWindow should be replaced with the window handle of the carbon
// window that should be tied to the Safari window.
NSWindow* myWindow = [[[NSWindow alloc] initWithWindowRef:yourCarbonWindow] autorelease];
// Now create a parent child relationship
[browserWindow addChildWindow:myWindow ordered:NSWindowAbove];
}但问题是npWindow->窗口没有任何值。当使用printf检查时,它会显示0值,这意味着它没有被初始化或空。
但在Firefox中,它带来了一些价值。谁能告诉我如何在Safari中获得NSWindow,或者哪里可能有问题?碳窗口的概念是什么?
发布于 2015-10-26 14:02:29
现在版本的Safari不支持Carbon事件模型(这是您的代码片段所使用的),只有可可事件模型,并且根据文档,该事件模型中的window ref为null。
直接使用窗口一直是NPAPI插件(至少在Mac上)的反模式(至少在Mac上),使用64位和进程外的插件就变得不可能了;NSWindow不在插件的进程中,因此您无法获得指向它的指针。您应该绘制到API所建立的上下文或层(取决于您的绘图模型),而不是试图显示您自己的子窗口。
https://stackoverflow.com/questions/33332608
复制相似问题