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

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

  • 32位Windows
  • 64位Windows
  • Linux的

使用用户代理字段检测Linux很容易; 但是如果Windows是32位还是64位,可以确定吗?

用户可能使用奇怪的浏览器 – IE和Firefox是常见的,我们可能有一个Opera用户的地方; 也许也是Chrome用户。 我知道,64位的Windows 7带有32位和64位版本的IE,我想把它们都发送到我的下载的64位版本。

(编辑补充:我知道我应该提供所有的选项,我会的,但是人们不会阅读这些选项 ,所以我想默认提供正确的下载,以提高可用性。当然,这是有帮助的如果我做对了,如果我弄错了,这是非常无益的。从目前的答案来看,看起来好像没有可靠的方法)。

试试这个,在用户代理string中查找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"); } 

我做了一些testing。 这里是结果,希望它有帮助:

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

 32位窗口+ Safari浏览器:
 window.navigator.platform =的Win32

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

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

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

 32位Linux薄荷(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'; }; 

分析大约14000个独特的用户代理 ( 从这里 ),我想出了以下string来寻找:

  • x86_64的
  • X86-64
  • Win64平台
  • 64; (注意分号!没有它,你会有误报。)
  • AMD64
  • AMD64
  • WOW64
  • x64_64

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

  • IA64
  • SPARC64
  • PPC64
  • IRIX64

当心,不要只是寻找任何包含“64”甚至“x64”的东西。 Chrome的内部版本号,蜘蛛/机器人,库,.NET版本,解决scheme等也可能包含string“x64”,同时仍然是32位(或其他)操作系统。

请注意,您可以不区分大小写地search所有这些string。

我一直没能在ARM上find任何东西。 也许是别人? 请编辑,这是一个社区维基。

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

我不确定你的情况,但我会考虑只是做大多数其他网站,让用户select他们得到的下载。 他们可能会将其下载到另一台机器上,放在闪存设备上,或者只是想让32位版本在64位机器上运行。 无论什么原因,我宁愿有select。

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

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

背风处

不是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

对于具有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上看到代码 。

我用下面的代码:

 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不支持在64位浏览器上使用flash播放器,所以你可以尝试检测它,如果检测成功,而不是32位的浏览器,如果没有的话,那就是32位的浏览器没有flash插件,或者是64位的浏览器,因为Flash播放器的普及率是相当巨大的(参见http://www.adobe.com/products/player_census/ flashplayer / version_penetration.html ),这应该是足以至less检测Mac下的X32浏览器。

适用于任何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"); } 

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

我恢复了以上漂亮的search结果到这些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 ; } 

testing它:

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

谢谢大家!

我发现这个老问题,并认为与我最近的一个开放源码库更新: https : //github.com/faisalman/ua-parser-js

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

没有人应该在今天(2016年)使用navigator.userAgentstring,因为它可以很容易地修改,并已成为“时髦”的修改,包括通过我目前使用的自定义浏览器!

现在你必须使用像node.js或类似的语言来获取操作系统的细节。

浏览器浏览器派对已经结束了。