【问题标题】:OS X: How to alter WebKit's plugin search path?OS X:如何更改 WebKit 的插件搜索路径?
【发布时间】:2011-09-10 15:49:22
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: flash macos cocoa plugins webkit


    【解决方案1】:

    我不相信有公开的、记录在案的方法可以做到这一点。

    查看 WebView 源代码,尤其是“WebPluginDatabase.mm”源文件,了解插件路径的评估方式以及在不同位置找到的插件的优先级。默认情况下,搜索路径似乎按以下顺序排列:

    1. ~/图书馆/互联网插件
    2. /库/Internet 插件
    3. App Bundle 的插件文件夹

    因此,根据设计,您包含在应用程序包中的任何插件默认情况下都会被用户或系统库文件夹中的版本取代。

    如果使用未记录的 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”加载的东西;)

    【讨论】:

    • “DitchenFlash”听起来就像从一开始就应该调用的“ClickToFlash”。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2015-03-12
    • 2012-06-12
    • 2011-05-25
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多