Подтвердить что ты не робот

Обнаружение 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-разрядную версию моей загрузки.

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

4b9b3361

Ответ 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 или аналогичный, чтобы получить информацию о ОС.

Сторона навигатора браузера хорошо и по-настоящему.