2011-09-10 42 views
4

我有一个开发了类似浏览器的Mac桌面应用程序,它使用WebKit来呈现网页内容。OS X:如何改变WebKit的插件搜索路径?

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

不过,我想在我的应用程序包中捆绑一个私人Flash插件。当我的应用程序运行时,我希望WebKit将我的包中的私有Flash插件优先于系统上的任何其他Flash插件。

如何更改WebKit的插件搜索路径,以便我的应用程序将加载与我的应用程序捆绑在一起的私人Flash插件?

回答

3

我不相信有这样做的公开,有记录的方法。

查看WebView源代码,特别是在“WebPluginDatabase.mm”源文件中,了解插件路径的评估方式以及在各个位置中发现的插件的优先级。通过defauilt,它出现在搜索路径进入顺序如下:

  1. 〜/库/互联网插件
  2. /库/互联网插件
  3. 应用程序捆绑的插件文件夹

因此,通过设计,您的应用程序捆绑包中包含的任何插件将默认被用户或系统库文件夹中找到的版本取代。

如果使用无证SPI是一种选择,我看到有上WebView.mm的方法,基本上覆盖的插​​件路径列表中,通过调用适当的配置上WebPluginDatabase单:

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

    [_private->pluginDatabase setPlugInPaths:newPaths]; 
    [_private->pluginDatabase refresh]; 
} 

在基于SPI的解决方案的主题,另一个堆栈溢出问题有一个描述重写私有的WebView方法来提供特定的插件基于MIME类型的答案:

Prevent Flash in Cocoa WebView

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

+1

“DitchenFlash”听起来像什么“ClickToFlash”应该从一开始就调用。 :) –