2011-10-11 98 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