Обнаружить 64-битную или 32-битную Windows из User Agent или Javascript? - PullRequest
74 голосов
/ 16 ноября 2009

Я хочу предложить правильную версию загрузки. У меня есть следующие версии:

  • 32-битная Windows
  • 64-битная Windows
  • Linux

Обнаружение Linux с помощью поля User Agent легко; но можно ли надежно выяснить, является ли Windows 32-битной или 64-битной?

Пользователи могут использовать странные браузеры - IE и Firefox распространены, и у нас, вероятно, где-то есть пользователь Opera; может быть, пользователь Chrome тоже. Я знаю, что 64-битная Windows 7 поставляется с 32-битной и 64-битной версиями IE, и я хотел бы отправить им обе 64-битную версию моей загрузки.

(Отредактировано, чтобы добавить: я знаю, что я должен предоставить все параметры, и я буду. Но люди не читают параметры . Поэтому я хотел обеспечить правильную загрузку по умолчанию, чтобы улучшить удобство и простота использования. Конечно, хотя это полезно, если я правильно понимаю, это крайне бесполезно, если я ошибаюсь. И из ответов до сих пор не похоже, что есть надежный способ сделать это).

Ответы [ 12 ]

52 голосов
/ 29 июля 2011

Попробуйте, ищите WOW64 (32-битный на 64-битный) или Win64 (собственный 64-битный) в строке user-agent.

    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");
    }
38 голосов
/ 07 июня 2011

Я сделал несколько тестов. Вот результаты, надеюсь, это поможет:

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';
};
29 голосов
/ 04 декабря 2012

Анализируя около 14000 уникальных пользовательских агентов ( отсюда ), я нашел следующие строки для поиска:

  • x86_64
  • x86-64
  • Win64
  • 64; (Имейте в виду точку с запятой! Без нее у вас будут ложные срабатывания.)
  • amd64
  • 1018 * AMD64 *
  • WOW64
  • x64_64

Кроме того, хотя они имеют разные наборы инструкций и несовместимы с Intel x86_64, вы можете обнаружить следующее:

  • ia64
  • sparc64
  • ppc64
  • IRIX64

Но будьте осторожны, не ищите ничего, содержащего «64» или даже «x64». Номера сборки Chrome, пауки / боты, библиотеки, версии .NET, разрешения и т. Д. Также могут содержать строку «x64», оставаясь при этом 32-битной (или другой) ОС.

Обратите внимание, что вы можете искать все эти строки без учета регистра.

Я не смог ничего найти в ARM. Возможно, кто-то еще? Пожалуйста, отредактируйте, это вики сообщества.

24 голосов
/ 16 ноября 2009

Вы можете проверить window.navigator.platform и window.navigator.cpuClass.

Я не уверен в вашей ситуации, но я бы подумал просто сделать то, что делает большинство других сайтов, и позволить пользователю выбирать, какую загрузку он получит. Они могут загружать его на другую машину, устанавливать флэш-устройство или просто хотеть, чтобы 32-разрядная версия работала на их 64-разрядной версии. Какой бы ни была причина, я бы предпочел выбор.

17 голосов
/ 16 ноября 2009

Наиболее надежным решением будет создание 32-разрядного приложения-загрузчика, которое определяет архитектуру, а затем загружает и устанавливает соответствующую версию вашего приложения.

Я проверил два других ответа от RC и Pino. Они оба не работают из-за одной и той же проблемы, которую вы предлагаете - 32-битный IE в 64-битной Windows ошибочно идентифицирует платформу как 32-битную. Поскольку большинство людей используют 32-битный IE в 64-битной Windows (многие плагины, например Flash не доступны в 64-битной версии), будет много неточных идентификаций

Lee

8 голосов
/ 16 ноября 2009

Не со 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

4 голосов
/ 29 июля 2014

Для 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 .

3 голосов
/ 28 сентября 2015

Я возобновил результаты приятного поиска выше в этих функциях 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" ) );

Спасибо всем!

2 голосов
/ 31 мая 2011

Я использовал следующий код:

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.

1 голос
/ 15 апреля 2014

И window.navigator.cpuClass, и window.navigator.platform возвращают платформу браузера. Не системная платформа. Таким образом, если вы используете 32-битный браузер в 64-битной системе, то оба варианта вернут 32-битный. Что было бы неправильно.

...