Обнаружить 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");

}
Другие вопросы по тегам