Обнаружение 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-разрядную версию моей загрузки.
(Отредактировано для добавления: Я знаю, что должен предоставить все варианты, и я буду. Но люди не читают параметры. Поэтому я хотел бы предоставить правильную загрузку по умолчанию, чтобы улучшить удобство использования. Конечно, хотя это полезно, если я прав, это очень бесполезно, если я ошибаюсь. И из ответов до сих пор это не похоже там надежный способ сделать это).
Ответы
Ответ 1
Попробуйте это, ищите 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");
}
Ответ 2
Я провел несколько тестов. Вот результаты, надеюсь, что это поможет:
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';
};
Ответ 3
Анализируя 14000 уникальных пользовательских агентов (здесь), я придумал следующие строки для поиска:
- 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. Может быть, кто-то еще? Пожалуйста, отредактируйте, это сообщество wiki.
Ответ 4
Вы можете проверить window.navigator.platform
и window.navigator.cpuClass
.
Я не уверен в вашей ситуации, но я бы подумал, что просто делаю то, что делают большинство других сайтов, и позволяю пользователю выбирать, какую загрузку они получают. Они могут загружать их для другой машины, для установки на флеш-устройство или просто просто хотят, чтобы 32-разрядная версия запускалась в их 64-битной коробке. Какая бы ни была причина, я предпочел бы выбор.
Ответ 5
Наиболее надежным решением было бы создать 32-битное приложение-загрузчик, которое обнаруживает архитектуру, а затем загружает и устанавливает соответствующую версию вашего приложения.
Я проверил два других ответа от RC и Pino. Они оба не работают из-за той же проблемы, что и вы, - 32-разрядный IE на 64-битной Windows ошибочно идентифицирует платформу как 32-разрядную. Поскольку большинство людей запускают 32-разрядный IE на 64-битной Windows (многие плагины, например, Flash не доступны в 64-разрядной версии), будет много неадекватных идентификаторов
Ли
Ответ 6
Не со 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
Ответ 7
Для 64-битной Windows с 64-разрядным IE window.navigator.platform
будет "Win64", а window.navigator.cpuClass
будет "x64".
Для 64-битной Windows с 32-разрядным IE window.navigator.platform
будет "Win32", а window.navigator.cpuClass
будет "x86".
Для 32-разрядной Windows window.navigator.platform
будет "Win32", а window.navigator.cpuClass
будет undefined (я думаю).
-
Источник: Я сделал приложение, которое использует JavaScript, чтобы определить, использует ли кто-то 32-битный или 64-разрядный процессор. Вы можете увидеть здесь код GitHub.
Ответ 8
Я возобновил результаты хорошего поиска выше в этих 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" ) );
Спасибо всем!
Ответ 9
Я использовал следующий код:
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, вы можете просто попытаться его обнаружить. Если обнаружение будет успешным, чем 32-битный браузер, если нет, то это 32-битный браузер без флеш-плагина или 64-битного браузера. Поскольку скорость проникновения Flash-плеера довольно велика (см. http://www.adobe.com/products/player_census/flashplayer/version_penetration.html), это должно быть достаточно хорошим, чтобы хотя бы обнаружить браузер x32 под Mac.
Ответ 10
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");
}
Ответ 11
Оба файла window.navigator.cpuClass и window.navigator.platform возвращают платформу браузера. Не системная платформа. Так что если вы используете 32-битный браузер в 64-битной системе, то оба varibales вернут 32-битный. Что было бы неправильно.
Ответ 12
Я нашел этот старый вопрос и подумал об обновлении с помощью недавно открытой библиотеки с открытым исходным кодом, которую я нашел: 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
.
Ответ 13
Никто не должен использовать строку navigator.userAgent в этот день и возраст (2016), так как он может быть легко изменен и стал "модным" для модификации, включая пользовательский браузер, который я использую в настоящее время!
В эти дни вам нужно использовать такой язык, как node.js или аналогичный, чтобы получить информацию о ОС.
Сторона навигатора браузера хорошо и по-настоящему.