我已经使用 NPAPI 创建了一个 safari 插件,我想在我的插件中添加一个 NSView。
当我尝试获取 NPWindow throw function NPP_SetWindow(NPP instance, NPWindow* window)时,第二个参数为 nil。
我认为我的插件是无窗口的,但我不知道如何创建有窗口的。
我已经使用 NPAPI 创建了一个 safari 插件,我想在我的插件中添加一个 NSView。
当我尝试获取 NPWindow throw function NPP_SetWindow(NPP instance, NPWindow* window)时,第二个参数为 nil。
我认为我的插件是无窗口的,但我不知道如何创建有窗口的。
Mac 上的 NPAPI 不支持 NSView 作为窗口模式。有两种支持的模式:
曾经有一个 QuickDraw 模式,但已被弃用。
有关更多信息,请参阅Stuart Morgan 关于该主题的出色博客文章。
可以将 NSView 渲染到 CoreGraphics 上下文,但您必须代理所有事件,而且它远非完美。
编辑:为了进一步解释您的问题的答案,window 参数为 NULL 的原因(它是 C api,而不是 Obj C,所以它是 NULL,而不是 nil ......尽管它们是相同的东西 =])是因为在在Cocoa 事件模型中,您将获得一个 CGContextRef 作为绘图事件的一部分,该事件仅在该事件的上下文中有效。