从用户代理或Java脚本检测64位或32位Windows?


80

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

  • 32位Windows
  • 64位Windows
  • 的Linux

使用“用户代理”字段检测Linux很容易。但是可以可靠地确定Windows是32位还是64位?

用户可能使用的是奇怪的浏览器-IE和Firefox很常见,我们可能在某个地方有Opera用户。也许还有Chrome用户。我知道64位Windows 7附带了IE的32位和64位版本,我想将下载的64位版本都发送给他们。

(编辑添加:我知道我应该提供所有选项,但是我会的。但是人们不会阅读这些选项。因此,我希望默认情况下提供正确的下载,以提高可用性。当然,这是有帮助的如果我做对了,如果我做错了,那将是无济于事的。从目前的答案来看,这似乎还没有可靠的方法)。


1
令人惊讶的是,您的Linux版本可在x86,x64和ARM上运行。
MSalters

9
“ Linux版本”是源代码。Windows版本是二进制的。
user9876

Answers:


53

尝试此操作,在用户代理字符串中查找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");
    }


5
除64位Windows 7上的Safari缺少WOW64,缺少Win64并将其报告window.navigator.platform为win32之外,此功能都很好。我已经在Safari 4 / Win中尝试过;更高版本可能会更改。
Will Martin

2
并非100%准确,但这是一个很好的线索,因为没有更好的方法来可靠地对其进行检测。
2013年

39

我已经做了一些测试。以下是结果,希望对您有所帮助:

64位MacOS + 64位Safari或32位Chrome:
window.navigator.platform = MacIntel

32位Windows +野生动物园:
window.navigator.platform = Win32

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

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

64位Windows + 32 Firefox(或Chrome):
window.navigator.platform = Win32

32位Linux Mint(i686)+ firefox:
window.navigator.platform = Linux i686

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

64位Ubuntu + 64位主显节:
window.navigator.platform = Linux x86_64

到目前为止,我已经使用以下代码:

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

1
那是不正确的。带有Chrome 64位的Windows 64位也会产生“ Win32”。
阿波罗

31

通过分析大约14000个唯一的用户代理从此处开始),我提出了以下字符串来寻找:

  • x86_64
  • x86-64
  • Win64的
  • x64; (请记住分号!没有它,您将有假阳性。)
  • amd64
  • AMD64
  • WOW64
  • x64_64

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

  • ia64
  • sparc64
  • ppc64
  • IRIX64

但是要当心,不要只寻找包含“ 64”甚至“ x64”的东西。Chrome的内部版本号,爬虫/漫游器,库,.NET版本,分辨率等也可能包含字符串“ x64”,而仍然是32位(或其他)操作系统。

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

我无法在ARM上找到任何东西。也许有人吗?请编辑,这是一个社区Wiki。


我正在针对UA字符串中的RegExp`/ \ barm / i进行测试。“ arm”之前的“边界”一词很重要,否则它将与Ubuntu 9.10(Karmic Koala)的UA字符串匹配。我已经根据一些UA字符串(在useragentstring.com/pages/Allcode.google.com/p/google-web-toolkit/issues/detail?id=8038
Rob W

24

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

我不确定您的情况,但我会考虑做大多数其他网站所做的事情,然后让用户选择下载的内容。他们可能正在将其下载到另一台计算机上,放在闪存设备上,或者只是希望32位版本在其64位设备上运行。无论出于什么原因,我宁愿选择。


6
在我工作的地方,很长一段时间以来,我们一直提供所有下载选项,但是用户经常会为自己的系统下载错误的版本而犯错误。
exupero 2011年

1
大多数用户不确定时只会选择第一个。当您要向用户推荐时,可以先放置此版本,甚至可以使其比其他版本大一些。
菲利普

4
Windows 7(64位)上的Firefox:navigator.cpuClass === undefinednavigator.platform === "Win32"。IE9在同一台机器上navigator.cpuClsas === "x86"。这些都不能用于检测64位Windows。navigator.userAgent确实包含WOW64,因此该答案有效。
克里斯·摩根

19

最可靠的解决方案是创建一个32位加载器应用程序,该应用程序检测体系结构,然后下载并安装适当版本的应用程序。

我检查了RC和Pino的其他两个答案。由于与您建议的问题相同,它们都不起作用-64位Windows上的32位IE将错误地将平台标识为32位。由于大多数人在64位Windows上运行32位IE(许多插件(例如Flash)在64位中不可用),因此会有很多不准确的标识

背风处


1
我猜有人(不是我)否决了它,因为它没有直接回答问题。但是,这是完成我想做的事情的另一种方法。
user9876

3
32位IE包含WOW64令牌,因此很容易挑选出来。
内森·奥斯曼

我认为最好和最人性化的解决方案。
Radu

我绝对讨厌这些安装程序,但这是一个选择,请不要惹恼用户,然后再安装漂亮的工具栏。
Vitim.us 2013年

9

正如您所说的,浏览器可能是32位版本,而操作系统是64位,因此并不是100%肯定。

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

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

处理器:ia64

对于IE。

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

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


5
这没有解决原始问题。这将在使用32位IE的64位Windows 7机器上生成“ x86”。问题是要求检测系统位数和操作系统,而不是浏览器位数。
皮特

5

对于具有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未定义(我认为)。

--

资料来源:我制作了一个使用JavaScript来确定某人使用的是32位还是64位处理器的应用您可以在GitHub上查看代码


关于最后一点,您是错误的,这并不意味着用户拥有32台Windows机器。实际上,以上所有内容仅提供浏览器信息,而不提供OS。
Mo Beigi 2015年

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" ) );

谢谢大家!


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 :(.。肯定是32位浏览器(如果没有),则是没有Flash插件或64位浏览器的32位浏览器。因为Flash Player的渗透率非常高(请参见http://www.adobe.com/products/player_census/ flashplayer / version_penetration.html),这应该足以至少检测Mac下的x32浏览器。


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");

}

1

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


1

我发现了这个古老的问题,并想通过最近发现的开源库进行更新: 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.