2011-09-10 69 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」應該從一開始就調用。 :) –