npWindow->window 在 NPP_SetWindow 函数中给出 0 值,Mac 上的 Safari 浏览器插件
npWindow->window gives 0 value in NPP_SetWindow function, plugin for Safari browser on Mac
一个在 windows 上的 firefox 中运行良好的插件现在正在移植到 Mac 上的 safari。我们正在使用 Xcode 进行开发。我们想要在 safari 浏览器中使用 window 来显示视频。我阅读了一段关于在 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 值,意味着它没有初始化或 NULL。
但在 Firefox 中它具有一定的价值。
有人可以告诉我如何在 Safari 中获取 NSWindow 或问题出在哪里吗? Carbon window 是什么概念?
现代版本的 Safari 不支持 Carbon 事件模型(这是您的代码片段正在使用的),仅支持 Cocoa event model,并且根据文档,window ref 在该事件模型。
在 NPAPI 插件(至少在 Mac 上)直接使用 window 已经 anti-pattern 了很长一段时间,并且 64- bit 和 out-of-process 插件已变得不可能; NSWindow 不在您的插件进程中,因此您无法获得指向它的指针。您应该绘制到 API 建立的上下文或层(取决于您的绘图模型),而不是试图显示您自己的 child window.
一个在 windows 上的 firefox 中运行良好的插件现在正在移植到 Mac 上的 safari。我们正在使用 Xcode 进行开发。我们想要在 safari 浏览器中使用 window 来显示视频。我阅读了一段关于在 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 值,意味着它没有初始化或 NULL。
但在 Firefox 中它具有一定的价值。 有人可以告诉我如何在 Safari 中获取 NSWindow 或问题出在哪里吗? Carbon window 是什么概念?
现代版本的 Safari 不支持 Carbon 事件模型(这是您的代码片段正在使用的),仅支持 Cocoa event model,并且根据文档,window ref 在该事件模型。
在 NPAPI 插件(至少在 Mac 上)直接使用 window 已经 anti-pattern 了很长一段时间,并且 64- bit 和 out-of-process 插件已变得不可能; NSWindow 不在您的插件进程中,因此您无法获得指向它的指针。您应该绘制到 API 建立的上下文或层(取决于您的绘图模型),而不是试图显示您自己的 child window.