Обнаружить 64-битную или 32-битную Windows из User Agent или Javascript?
Я хочу предложить правильную версию загрузки. У меня есть следующие версии:
- 32-битная Windows
- 64-битная Windows
- Linux
Обнаружить Linux с помощью поля User Agent легко; но возможно ли достоверно определить, является ли Windows 32-битной или 64-битной?
Пользователи могут использовать странные браузеры - IE и Firefox распространены, и у нас, вероятно, есть пользователь Opera где-то; может быть, пользователь Chrome тоже. Я знаю, что 64-битная Windows 7 поставляется с 32-битной и 64-битной версиями IE, и я хотел бы отправить им обе 64-битную версию моей загрузки.
(Отредактировано, чтобы добавить: я знаю, что я должен предоставить все варианты, и я буду. Но люди не читают варианты. Поэтому я хотел обеспечить правильную загрузку по умолчанию, чтобы улучшить удобство использования. Конечно, хотя это полезно если я правильно понял, это крайне бесполезно, если я ошибаюсь. И из ответов до сих пор не похоже, что есть надежный способ сделать это).
12 ответов
Попробуйте это, ищите WOW64 (32-разрядный на 64-разрядный) или 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");
}
Я сделал несколько тестов. Вот результаты, надеюсь, это поможет:
64-разрядная версия MacOS + 64-разрядная версия Safari или 32-разрядная версия Chrome: window.navigator.platform=MacIntel 32-битные окна + сафари: 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=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';
};
Анализируя около 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. Возможно, кто-то еще? Пожалуйста, отредактируйте, это вики сообщества.
Вы можете проверить window.navigator.platform
и window.navigator.cpuClass
,
Я не уверен в вашей ситуации, но я хотел бы подумать о том, чтобы делать то, что делает большинство других сайтов, и позволить пользователю выбирать, какую загрузку он получит. Они могут загружать его на другую машину, устанавливать флэш-устройство или просто хотеть, чтобы 32-разрядная версия работала на их 64-разрядной версии. Какой бы ни была причина, я бы предпочел выбор.
Наиболее надежным решением будет создание 32-разрядного приложения-загрузчика, которое определяет архитектуру, а затем загружает и устанавливает соответствующую версию вашего приложения.
Я проверил два других ответа от RC и Pino. Они оба не работают из-за одной и той же проблемы, которую вы предлагаете: 32-битный IE в 64-битной Windows ошибочно идентифицирует платформу как 32-битную. Поскольку большинство людей используют 32-битный IE в 64-битной Windows (многие плагины, например, Flash недоступны в 64-битной версии), будет много неточной идентификации
подветренный
Не со 100% уверенностью, как вы говорите, браузер может быть 32-битной версией, а ОС - 64-битной.
Чтобы обнаружить браузер, попробуйте следующий код:
<script language=javascript>
<!--
document.write("CPU :"+window.navigator.cpuClass);
//-->
</script>
Процессор: ia64
Для IE.
http://msdn.microsoft.com/en-us/library/ms531090%28VS.85%29.aspx
Коммерческий продукт: https://www.cyscape.com/showbrow.aspx
Для 64-битной Windows с 64-битным IE window.navigator.platform
будет "Win64" и window.navigator.cpuClass
будет "х64".
Для 64-битной Windows с 32-битным IE, window.navigator.platform
будет "Win32" и window.navigator.cpuClass
будет "x86".
Для 32-битной Windows, window.navigator.platform
будет "Win32" и window.navigator.cpuClass
будет неопределенным (я думаю).
-
Источник: я создал приложение, которое использует JavaScript, чтобы определить, использует ли кто-то 32-битный или 64-битный процессор. Вы можете увидеть код здесь на GitHub.
Я возобновил результаты хорошего поиска выше в этих функциях 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" ) );
Спасибо всем!
Я использовал следующий код:
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 не поддерживает flash player в браузерах x64, вы можете просто попытаться обнаружить его. Если обнаружение прошло успешно, чем 32-битный браузер, если нет, то 32-битный браузер без флеш-плагина или 64-битный браузер. Потому что уровень проникновения Flash-плеера довольно велик (см. http://www.adobe.com/products/player_census/flashplayer/version_penetration.html), этого должно быть достаточно, чтобы хотя бы обнаружить браузер x32 под Mac.
Я нашел этот старый вопрос и думал об обновлении с недавней библиотекой с открытым исходным кодом, которую я нашел: 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
,
И window.navigator.cpuClass, и window.navigator.platform возвращают платформу браузера. Не системная платформа. Так что если вы используете 32-битный браузер в 64-битной системе, то оба варианта вернутся 32-битные. Что было бы неправильно.
64-битный IE на 64-битной Windows для любого браузера Internet Explorer
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");
}