Xcode npWindow->;窗口在NPP_SetWindow函数中给出0值,该函数是Mac上Safari浏览器的插件

Xcode npWindow->;窗口在NPP_SetWindow函数中给出0值,该函数是Mac上Safari浏览器的插件,xcode,safari,osx-yosemite,nswindow,npapi,Xcode,Safari,Osx Yosemite,Nswindow,Npapi,一个在windows上的firefox中运行良好的插件现在被移植到Mac上的safari。我们正在使用Xcode进行开发。我们希望在safari浏览器中有一个可以显示视频的窗口。我阅读了关于NPP_SetWindow函数中使用NSwindow的代码,如下所示: NPError NPP_SetWindow(NPP instance, NPWindow* npWindow) { // Get a Cocoa window reference of the browser window NP_CGCo

一个在windows上的firefox中运行良好的插件现在被移植到Mac上的safari。我们正在使用Xcode进行开发。我们希望在safari浏览器中有一个可以显示视频的窗口。我阅读了关于NPP_SetWindow函数中使用NSwindow的代码,如下所示:

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->window没有任何值。当使用printf检查时,它显示0值,表示它未初始化或为空

但在Firefox中,它有一些价值。
有没有人能告诉我如何在Safari中获得NSWindow,或者问题出在哪里?碳窗的概念是什么?

Safari的现代版本不支持碳事件模型(这是您的代码片段正在使用的),仅支持,并且根据文档,该事件模型中的窗口引用为空

在NPAPI插件(至少在Mac上)中,直接乱动窗口是一种反模式已经有相当长一段时间了,使用64位和进程外插件已经不可能了;NSWindow不在插件的进程中,因此无法获取指向它的指针。您应该在API建立的上下文或图层(取决于您的图形模型)中绘图,而不是试图显示自己的子窗口