OS X: как изменить путь поиска плагинов WebKit?

У меня есть разработанное приложение Mac Desktop, похожее на браузер, которое использует WebKit для отображения веб-контента.

Мое приложение ссылается на стандартную системную структуру WebKit (оно не связывает частную структуру WebKit).

Тем не менее, я хотел бы включить частный плагин Flash в свой пакет приложений. Когда мое приложение запускается, я бы хотел, чтобы WebKit предпочитал частный плагин Flash в моем комплекте любому другому плагину Flash в системе.

Как я могу изменить путь поиска плагинов WebKit, чтобы мое приложение загружало мой частный плагин Flash, связанный с моим приложением?


person Todd Ditchendorf    schedule 10.09.2011    source источник


Ответы (1)


Я не верю, что для этого существует общедоступный документированный метод.

Взгляните на исходный код WebView, в частности на исходный файл «WebPluginDatabase.mm», чтобы понять, как оцениваются пути подключаемых модулей и какой приоритет отдается подключаемым модулям, найденным в разных местах. По умолчанию кажется, что путь поиска идет в следующем порядке:

  1. ~/Библиотека/Интернет-плагины
  2. /Библиотека/Интернет-плагины
  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, в другом вопросе о переполнении стека есть ответ, в котором описывается переопределение частного метода WebView для предоставления определенного плагина на основе типа MIME:

Запретить Flash в Cocoa WebView

Это дает мне еще одну идею, которая может подойти для ваших целей. Поскольку вы отвечаете за весь процесс просмотра, вы можете рассмотреть возможность изменения всего HTML-кода, представленного в вашем браузере, сканирования и изменения любого контента, который обычно привязан к плагину Flash, и изменения его для вызова пользовательского типа MIME. или что-то еще, чтобы вместо этого загружался ваш «DitchenFlash»;)

person danielpunkass    schedule 10.09.2011
comment
DitchenFlash звучит так, как ClickToFlash должен был называться с самого начала. :) - person Dave DeLong; 10.09.2011