我想提供正确的下载版本。我的版本是:
使用User Agent字段检测Linux很容易;但是有可能可靠地判断Windows是32位还是64位?
用户可能正在使用奇怪的浏览器 - IE和Firefox很常见,我们可能在某处有Opera用户;也许是Chrome用户。我知道64位Windows 7附带32位和64位版本的IE,我想将它们发送到我下载的64位版本。
(编辑补充说:我知道我应该提供所有选项,我会。但是people don't read the options。所以我想默认提供正确的下载,以提高可用性。当然,虽然这是如果我做对了,那就太有帮助了,如果我弄错了,那就非常无益了。从目前为止的答案来看,看起来并不是一种可行的方法。
答案 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-agents(from here)进行分析,我想出了以下字符串来寻找:
此外,虽然它们具有不同的指令集且与Intel x86_64不兼容,但您可能需要检测以下内容:
请注意,不要只查找包含“64”甚至“x64”的任何内容。 Chrome的构建号,蜘蛛/机器人,库,.NET版本,分辨率等也可能包含字符串“x64”,同时仍然是32位(或其他)操作系统。
请注意,您可以不区分大小写地搜索所有这些字符串。
我无法在ARM上找到任何内容。也许别人?请编辑,这是一个社区维基。
答案 3 :(得分:24)
您可以查看window.navigator.platform
和window.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
答案 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 processor。 You 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
。