可以通过编程方式将插件(用于Mac上的safari)窗口化或无窗口化吗?

时间:2015-10-27 03:53:19

标签: osx-yosemite npapi browser-plugin windowless windowed

我们正在为mac上的safari浏览器制作一个插件。

浏览互联网后,我发现mac上的插件通常没有窗口,但我想要一个带窗口的插件。即使在函数 NPP_SetWindow 中,我也尝试打印变量类型(类型为 NPWindowType )的值,如下所示:

NPError NPP_SetWindow(NPP instance, NPWindow * pNPWindow)
{
...
printf("....: %d",pNPWindow->type);
...
}

打印 2 ,即其值为NPWindowTypeDrawable表示无窗口。

此外,我在某处阅读了以下代码:

NPError NPP_New(NPMIMEType pluginType,
        NPP instance, uint16 mode,
        int16 argc, char *argn[],
        char *argv[], NPSavedData *saved)
{
 ...
 NPError result = NPN_SetValue(instance, NPPVpluginWindowBool, (void*)false);
}

这里说通过在 NPN_SetValue 函数调用中将 NPPVpluginWindowBool​​ 的值传递为 false ,可以使插件无窗口。 如果插件没有进行此调用,则将其视为窗口插件。但后来它还说“Mac OS X上的插件总是无窗口”。我还没有对此感到厌倦。

我的问题是,将 NPPVpluginWindowBool​​ 真正的值传递到这里make plugin窗口?我还没有尝试过。

请建议如何以编程方式或任何其他方式使其成为窗口插件,以便 pNPWindow->类型(在第一个代码段中)也会打印1,即 NPWindowTypeWindow 表示窗口插件。

感谢。

1 个答案:

答案 0 :(得分:1)

Mac上没有窗口插件;有一次,但现在已经没有了。

现在你只有绘图模型,有三个:

  • CoreGraphics中
  • CoreAnimation
  • InvalidatingCoreAnimation

前两个是唯一适用于Safari的。无法在Mac上获取窗口对象。曾经有一些可以用于Quartz和QuickDraw的黑客攻击,也可能使用Carbon和CoreGraphics,但这些模型现在已经不复存在了。

另见: