0

我们正在为 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​​ 的真实值会使插件窗口化吗?我还没试过。

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

谢谢。

4

1 回答 1

1

Mac 上没有窗口插件;曾经有过,但现在没有了。

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

  • 核心图形
  • 核心动画
  • 无效的CoreAnimation

前两个是唯一适用于 Safari 的。没有办法在 Mac 上获取窗口对象。曾经有一些技巧可以用于 Quartz 和 QuickDraw,也可能用于 Carbon 和 CoreGraphics,但这些模型现在早已不复存在。

也可以看看:

于 2015-10-27T06:39:22.587 回答