从用户代理或Javascript检测64位或32位Windows?

时间:2009-11-16 12:35:50

标签: javascript 64-bit operating-system user-agent

我想提供正确的下载版本。我的版本是:

  • 32位Windows
  • 64位Windows
  • 的Linux

使用User Agent字段检测Linux很容易;但是有可能可靠地判断Windows是32位还是64位?

用户可能正在使用奇怪的浏览器 - IE和Firefox很常见,我们可能在某处有Opera用户;也许是Chrome用户。我知道64位Windows 7附带32位和64位版本的IE,我想将它们发送到我下载的64位版本。

(编辑补充说:我知道我应该提供所有选项,我会。但是people don't read the options。所以我想默认提供正确的下载,以提高可用性。当然,虽然这是如果我做对了,那就太有帮助了,如果我弄错了,那就非常无益了。从目前为止的答案来看,看起来并不是一种可行的方法。

12 个答案:

答案 0 :(得分:51)

尝试此操作,在用户代理字符串中查找WOW64(64位32位)或Win64(本机64位)。

if (navigator.userAgent.indexOf("WOW64") != -1 || 
    navigator.userAgent.indexOf("Win64") != -1 ){
   alert("This is a 64 bit OS");
} else {
   alert("Not a 64 bit OS");
}

答案 1 :(得分:38)

我做过一些测试。以下是结果,希望有所帮助:

64 bit MacOS + 64 bit Safari or 32 bit Chrome:
window.navigator.platform=MacIntel

32 bit windows + safari:
window.navigator.platform=Win32

64 bit Windows + 64 bit IE:
window.navigator.platform=Win64
window.navigator.cpuClass=x64

64 bit Windows + 32 bit IE:
window.navigator.platform=Win32
window.navigator.cpuClass=x86

64 bit Windows + 32 Firefox (or Chrome):
window.navigator.platform=Win32

32 bit linux mint (i686) + firefox:
window.navigator.platform=Linux i686

64 bit Ubuntu (x86_64) + 32 bit Chrome:
window.navigator.platform=Linux i686

64 bit Ubuntu + 64 bit Epiphany:
window.navigator.platform=Linux x86_64

到目前为止,我已使用此代码:

deployJava.isWin64OS = function() {
    return navigator.userAgent.indexOf('WOW64')>-1 || window.navigator.platform=='Win64';
};

答案 2 :(得分:29)

围绕14000 unique user-agentsfrom here)进行分析,我想出了以下字符串来寻找:

  • x86_64的
  • x86-64的
  • Win64的
  • 64; (记住分号!没有它你就会有误报。)
  • AMD64
  • AMD64
  • WOW64
  • x64_64

此外,虽然它们具有不同的指令集且与Intel x86_64不兼容,但您可能需要检测以下内容:

  • IA64
  • SPARC64
  • PPC64
  • IRIX64

请注意,不要只查找包含“64”甚至“x64”的任何内容。 Chrome的构建号,蜘蛛/机器人,库,.NET版本,分辨率等也可能包含字符串“x64”,同时仍然是32位(或其他)操作系统。

请注意,您可以不区分大小写地搜索所有这些字符串。

我无法在ARM上找到任何内容。也许别人?请编辑,这是一个社区维基。

答案 3 :(得分:24)

您可以查看window.navigator.platformwindow.navigator.cpuClass

我不确定你的情况,但我会考虑做大多数其他网站所做的事情,并让用户选择他们获得的下载。他们可以将它下载到另一台机器上,放在闪存设备上,或者只是想让32位版本在他们的64位盒子上运行。不管是什么原因,我宁愿做出选择。

答案 4 :(得分:17)

最可靠的解决方案是创建一个32位加载器应用程序来检测架构,然后下载并安装相应版本的应用程序。

我已经检查了RC和Pino的另外两个答案。它们都不能正常工作,因为你提出了同样的问题 - 64位Windows上的32位IE会错误地将平台识别为32位。由于大多数人在64位Windows上运行32位IE(许多插件,例如Flash不能在64位中使用),因此会有大量的真空识别

答案 5 :(得分:8)

不是100%确定,因为你说浏览器可能是32位版本,而操作系统是64位。

要检测浏览器,请尝试以下代码:

<script language=javascript>   
  <!--   
  document.write("CPU :"+window.navigator.cpuClass);   
  //-->   
</script> 
  

CPU:ia64

对于IE。

http://msdn.microsoft.com/en-us/library/ms531090%28VS.85%29.aspx

商业产品:https://www.cyscape.com/showbrow.aspx

答案 6 :(得分:4)

对于64位IE的64位Windows window.navigator.platform将为“Win64”,window.navigator.cpuClass将为“x64”。

对于具有32位IE的64位Windows,window.navigator.platform将为“Win32”,window.navigator.cpuClass将为“x86”。

对于32位Windows,window.navigator.platform将是“Win32”,window.navigator.cpuClass将是未定义的(我认为)。

-

来源:我制作了an app that uses JavaScript to determine if someone is using a 32 bit or 64 bit processorYou can see the code here on GitHub

答案 7 :(得分:3)

我将上面的精彩搜索结果恢复到这些JS函数中。希望他们能够帮助这里的每个人快速响应他们的需求(以及我的需求!)

function get_bits_system_architecture()
{
    var _to_check = [] ;
    if ( window.navigator.cpuClass ) _to_check.push( ( window.navigator.cpuClass + "" ).toLowerCase() ) ;
    if ( window.navigator.platform ) _to_check.push( ( window.navigator.platform + "" ).toLowerCase() ) ;
    if ( navigator.userAgent ) _to_check.push( ( navigator.userAgent + "" ).toLowerCase() ) ;

    var _64bits_signatures = [ "x86_64", "x86-64", "Win64", "x64;", "amd64", "AMD64", "WOW64", "x64_64", "ia64", "sparc64", "ppc64", "IRIX64" ] ;
    var _bits = 32, _i, _c ;
    outer_loop:
    for( var _c = 0 ; _c < _to_check.length ; _c++ )
    {
        for( _i = 0 ; _i < _64bits_signatures.length ; _i++ )
        {
            if ( _to_check[_c].indexOf( _64bits_signatures[_i].toLowerCase() ) != -1 )
            {
               _bits = 64 ;
               break outer_loop;
            }
        }
    }
    return _bits ; 
}


function is_32bits_architecture() { return get_bits_system_architecture() == 32 ? 1 : 0 ; }
function is_64bits_architecture() { return get_bits_system_architecture() == 64 ? 1 : 0 ; }

测试它:

document.write( "Which is my current bits system architecture ? " + get_bits_system_architecture() + "<br>" );

document.write( "Is it 32 bits ? " + ( is_32bits_architecture() ? "YES" : "NO" ) + "<br>" );

document.write( "Is it 64 bits ? " + ( is_64bits_architecture() ? "YES" : "NO" ) );

感谢大家!

答案 8 :(得分:2)

我使用了以下代码:

var is32BitBrowser = true;
if( window.navigator.cpuClass != null && window.navigator.cpuClass.toLowerCase() == "x64" )
   is32BitBrowser = false;
if( window.navigator.platform.toLowerCase() == "win64" )
   is32BitBrowser = false;

它到处都是Mac电脑。不幸的是,似乎无法通过JavaScript获取该信息:(。然而,还有一个技巧可以在那里完成。因为Adobe不支持x64浏览器上的Flash播放器,你可以尝试检测它。如果检测成功,比它绝对是32位浏览器,如果没有,比没有Flash插件的32位浏览器或它的64位浏览器。因为Flash播放器的渗透率非常大(见http://www.adobe.com/products/player_census/flashplayer/version_penetration.html),这应该足够好了至少检测Mac下的x32浏览器。

答案 9 :(得分:1)

适用于任何Internet Explorer浏览器的64位Windows上的64位IE

if (navigator.userAgent.indexOf("MSIE") != -1 && navigator.userAgent.indexOf("Win64") != -1 && navigator.userAgent.indexOf("x64") != -1){

   alert("This is 64 bit browser");

}
else {

   alert("Not 64 bit browser");

}

答案 10 :(得分:1)

window.navigator.cpuClass和window.navigator.platform都返回浏览器平台。不是系统平台。因此,如果您在64位系统上运行32位浏览器,则两个varibales都将返回32位。这是不正确的。

答案 11 :(得分:0)

我发现了这个老问题,并且想到了我最近发现的一个开源库的更新:https://github.com/faisalman/ua-parser-js

根据文档,方法getCPU() returns { architecture: '' }具有以下可能的值:68k, amd64, arm, arm64, avr, ia32, ia64, irix, irix64, mips, mips64, pa-risc, ppc, sparc, sparc64