Я хочу предложить правильную версию для скачивания. У меня есть следующие версии:
- 32-битная Windows
- 64-битная Windows
- Linux
Обнаружить Linux с помощью поля User Agent легко; но можно ли достоверно выяснить, является ли Windows 32-битной или 64-битной?
Пользователи могут использовать странные браузеры - распространены IE и Firefox, и у нас, вероятно, где-то есть пользователь Opera; возможно, пользователь Chrome тоже. Я знаю, что 64-битная Windows 7 поставляется с 32-битной и 64-битной версиями IE, и я хотел бы отправить им обе 64-битные версии моей загрузки.
(Отредактировано для добавления: я знаю, что должен предоставить все варианты, и я это сделаю. Но люди не читают варианты . Поэтому я хотел предоставить правильную загрузку по умолчанию, чтобы улучшить удобство использования. Конечно, пока это полезно если я все сделаю правильно, это будет крайне бесполезно, если я ошибаюсь. И, судя по ответам, не похоже, что есть надежный способ сделать это).
источник
Ответы:
Попробуйте это, ищет 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"); }
источник
window.navigator.platform
отображается как win32. Я пробовал в Safari 4 / Win; более поздние версии могут измениться.Я сделал несколько тестов. Вот результаты, надеюсь, они помогут:
Пока я использовал этот код:
deployJava.isWin64OS = function() { return navigator.userAgent.indexOf('WOW64')>-1 || window.navigator.platform=='Win64'; };
источник
Проанализировав около 14000 уникальных пользовательских агентов ( отсюда ), я придумал следующие строки, которые нужно искать:
Кроме того, хотя они имеют разные наборы инструкций и несовместимы с Intel x86_64, вы можете захотеть обнаружить следующее:
Однако будьте осторожны, не ищите просто что-либо, содержащее "64" или даже "x64". Номера сборок Chrome, пауки / боты, библиотеки, версии .NET, разрешения и т. Д. Также могут содержать строку «x64», будучи 32-битной (или другой) ОС.
Обратите внимание, что вы можете искать все эти строки без учета регистра.
Я не смог ничего найти на ARM. Может, кто-то еще? Пожалуйста, отредактируйте, это вики сообщества.
источник
Вы можете проверить
window.navigator.platform
иwindow.navigator.cpuClass
.Я не уверен в вашей ситуации, но я бы подумал о том, чтобы просто сделать то, что делают большинство других сайтов, и позволить пользователю выбирать, какую загрузку они получить. Они могут загрузить его на другую машину, чтобы установить флэш-устройство, или просто могут захотеть, чтобы 32-разрядная версия работала на их 64-разрядном компьютере. Какой бы ни была причина, я предпочел бы иметь выбор.
источник
navigator.cpuClass === undefined
,navigator.platform === "Win32"
. IE9 на той же машине,navigator.cpuClsas === "x86"
. Ни один из них не может использоваться для обнаружения 64-битной Windows.navigator.userAgent
все же содержитWOW64
, так что ответ действителен.Самым надежным решением было бы создать 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>
Для 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
будет «x64».Для 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-плеер в браузерах x64, вы можете просто попытаться обнаружить его. Если обнаружение прошло успешно, чем это определенно 32-битный браузер, если нет, то это 32-битный браузер без флэш-плагина или 64-битный браузер. Поскольку скорость проникновения Flash-плеера довольно велика (см. http://www.adobe.com/products/player_census/ flashplayer / version_penetration.html ), этого должно быть достаточно, чтобы, по крайней мере, обнаружить браузер x32 под Mac.
источник
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"); }
источник
Оба window.navigator.cpuClass и window.navigator.platform возвращают платформу браузера. Не системная платформа. Поэтому, если вы используете 32-разрядный браузер в 64-разрядной системе, оба варианта будут возвращать 32-разрядные. Что было бы неверно.
источник
Я нашел этот старый вопрос и подумал об обновлении с помощью недавней библиотеки с открытым исходным кодом, которую я нашел: 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
.источник