2011-10-11 58 views
0

我想檢測基於npapi的插件是以非處理模式(瀏覽器處於64位模式)還是處於進程模式(瀏覽器處於32位模式)。當前我使用以下代碼來檢測在npapi插件中檢測瀏覽器啓動模式

NSString * processName = [[NSProcessInfo processInfo] processName];

if (processName) 
{ 
    if (!([processName compare:@"Safari" options:NSCaseInsensitiveSearch] == NSOrderedSame) 
     && !([processName compare:@"firefox" options:NSCaseInsensitiveSearch] == NSOrderedSame) 
     && !([processName compare:@"firefox-bin" options:NSCaseInsensitiveSearch] == NSOrderedSame) 
     && !([processName compare:@"Google Chrome" options:NSCaseInsensitiveSearch] == NSOrderedSame)) 
    { 
     // out of process 
    } 
} 

如果瀏覽器的可執行文件名失敗,此代碼將失敗。是否有另一種檢查瀏覽器啓動模式的方法?

+0

這可能是檢查你要檢查的唯一方法,但正如smorgan所說,這完全是錯誤的方法。你應該真的考慮看FireBreath(http://www.firebreath.org),這可能是一個更輕的學習曲線,並解決了很多你可能遇到的問題。 – taxilian

回答

1

你問題的前提是不正確的; 「OOP」和「64位」不是等同的概念。適用於Mac和Windows的Chrome目前僅支持32位,但始終在進程外運行插件。像Firefox這樣的基於壁虎的瀏覽器具有隱藏的首選項來控制插件運行在進程之外還是進程之外。

更重要的是:插件不應該在乎它是在進程內還是在進程外運行;插件API不會更改。你真的想要解決什麼問題,你認爲你需要知道這一點?

+0

我的插件有兩個繪圖模型Core Animation和Core Graphics。如果插件用完了,我加載Core Animation繪圖模型並使用Cocoa事件,否則我們加載Core Graphics模型。所以我需要檢測我的插件是否被加載了。 – Vishvesh

+1

不,你需要做的就是使用模型協商系統:。嘗試通過瀏覽器的名稱或其流程模型或模型協商系統以外的任何其他模型來決定您的模型是不正確的。 (我甚至不清楚爲什麼你認爲進程內和進程外與這個選擇有關,因爲我不知道任何瀏覽器的CA + Cocoa或CG + Cocoa支持是基於或者脫離過程。) – smorgan