OS X:如何改变WebKit的插件搜索路径?

时间:2011-09-10 15:49:23

标签: flash macos cocoa plugins webkit

我开发了一个类似浏览器的Mac桌面应用程序,它使用WebKit呈现Web内容。

我的应用程序链接到标准系统WebKit框架(它没有捆绑私有WebKit框架)。

但是,我想在我的应用包中捆绑一个私有Flash插件。当我的应用运行时,我希望WebKit更喜欢我的捆绑中的私有Flash插件而不是系统上的任何其他Flash插件。

如何修改WebKit的插件搜索路径,以便我的应用程序加载我的应用程序捆绑的私有Flash插件?

1 个答案:

答案 0 :(得分:3)

我认为没有公开的,有文件证明的方法。

查看WebView源代码,特别是在“WebPluginDatabase.mm”源文件中,了解插件路径的评估方式以及在各个位置找到的插件的优先级。通过defauilt,搜索路径按此顺序显示:

  1. 〜/ Library / Internet Plug-Ins
  2. / Library / Internet Plug-ins
  3. App Bundle的插件文件夹
  4. 因此,根据设计,您在应用程序包中包含的任何插件默认情况下都会被用户或系统库文件夹中的版本所取代。

    如果使用未记录的SPI是一个选项,我看到WebView.mm上有一个方法基本上覆盖了插件路径列表,调用了WebPluginDatabase单例的适当配置:

    - (void)_setAdditionalWebPlugInPaths:(NSArray *)newPaths
    {
        if (!_private->pluginDatabase)
            _private->pluginDatabase = [[WebPluginDatabase alloc] init];
    
        [_private->pluginDatabase setPlugInPaths:newPaths];
        [_private->pluginDatabase refresh];
    }
    

    关于基于SPI的解决方案的主题,另一个Stack Overflow问题的答案描述了覆盖私有WebView方法以提供基于MIME类型的特定插件:

    Prevent Flash in Cocoa WebView

    这给了我另一个可能适合您的目的的想法。由于您负责整个浏览体验,因此您可能会考虑更改浏览器中显示的所有HTML代码,扫描和修改通常与Flash插件相关的任何内容,并将其更改为调用自定义MIME类型或任何让你的“DitchenFlash”加载;)