【问题标题】:Can a plugin(for safari on mac) be made windowed or windowless programmatically?可以通过编程方式将插件(用于 mac 上的 safari)设为窗口或无窗口吗?
【发布时间】:2015-10-27 03:53:19
【问题描述】:

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

通过互联网浏览后,我发现 mac 上的插件通常是无窗口的,但我想要一个有窗口的插件。即使在函数 NPP_SetWindow 中,我也尝试打印变量 type(类型为 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​​ 传递 true 值会使插件窗口化吗?我还没试过。

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    Mac 上没有窗口插件;以前有,现在没有了。

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

    • CoreGraphics
    • 核心动画
    • 无效的CoreAnimation

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

    另见:

    【讨论】:

    • 嗨@taxilian,感谢您的回答。您能否分享一个关于“您可以获得 CGContextRef,然后创建自己的屏幕外 NSWindow 和 NSView 并将它们渲染到 CGContextRef”的示例代码,从上面共享的链接之一中读取?
    • 另外,有没有办法从 CGContextRef 对象中获取 NSWindow?
    • 您无法从 CGContextRef 中获取 NSWindow。预测未来的问题:在插件过程中没有办法获取浏览器的 NSWindow。这不是聪明或发现漏洞的问题,你无法得到它,因为 OS X 上的窗口指针是特定于进程的,而你处于不同的进程中(正如我在回答你的另一个问题)。你想做的事是做不到的。我建议提出一个表达更高层次目标的问题,以便有人可以尝试为您指出正确的方向,而不是询问有关错误路径的细节。
    • 嗨@smorgan,你能告诉我,在Mac上用于Safari的NPAPI插件中究竟做了什么来在浏览器中显示视频?我的主要目标是将诸如窗口指针之类的东西(即指向浏览器窗口的指针)传递给下面的流引擎,该引擎将使用该指针在浏览器中显示视频。如果你能分享一些代码,那将是一个很大的帮助............谢谢。
    • 请再次阅读我上面的评论。你不能这样做。如果您的流媒体引擎需要窗口指针,那么您无法在现代 Mac 浏览器的浏览器窗口中显示它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多