User Agent 또는 Javascript에서 64 비트 또는 32 비트 Windows를 감지 하시겠습니까?


80

올바른 버전의 다운로드를 제공하고 싶습니다. 내가 가지고있는 버전은 다음과 같습니다.

  • 32 비트 Windows
  • 64 비트 Windows
  • 리눅스

User Agent 필드를 사용하여 Linux를 감지하는 것은 쉽습니다. 그러나 Windows가 32 비트인지 64 비트인지 확실하게 파악할 수 있습니까?

사용자는 이상한 브라우저를 사용하고있을 수 있습니다. IE와 Firefox는 일반적이며 어딘가에 Opera 사용자가있을 것입니다. Chrome 사용자 일 수도 있습니다. 64 비트 Windows 7에는 32 비트 및 64 비트 버전의 IE가 함께 제공된다는 것을 알고 있으며, 두 버전 모두 내 다운로드의 64 비트 버전을 보내고 싶습니다.

(추가로 편집 됨 : 모든 옵션을 제공해야한다는 것을 알고 있습니다.하지만 사람들은 옵션을 읽지 않습니다 . 따라서 기본적으로 사용성을 개선하기 위해 올바른 다운로드를 제공하고 싶었습니다. 물론 이것은 도움이됩니다. 내가 옳다면, 내가 틀렸다면 그것은 매우 도움이되지 않는다. 그리고 지금까지의 대답을 보면 믿을만한 방법이없는 것 같다).


1
Linux 버전이 x86, x64 및 ARM에서 작동한다는 것은 놀랍습니다.
MSalters

9
"Linux 버전"은 소스 코드입니다. Windows 버전은 바이너리입니다.
user9876

답변:


53

이를 시도하여 사용자 에이전트 문자열에서 WOW64 (64 비트에서 32 비트) 또는 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");
    }


5
WOW64가없고, Win64가없고, window.navigator.platformwin32 로보고되는 64 비트 Windows 7의 Safari를 제외하고는 잘 작동합니다 . Safari 4 / Win에서 사용해 보았습니다. 이후 버전은 변경 될 수 있습니다.
Will Martin

2
100 % 정확하지는 않지만 안정적으로 감지하는 더 좋은 방법이 없기 때문에 좋은 단서입니다.
Vitim.us 2013 년

39

몇 가지 테스트를했습니다. 결과는 다음과 같습니다. 도움이되기를 바랍니다.

64 비트 MacOS + 64 비트 Safari 또는 32 비트 Chrome :
window.navigator.platform = MacIntel

32 비트 Windows + Safari :
window.navigator.platform = Win32

64 비트 Windows + 64 비트 IE :
window.navigator.platform = Win64
window.navigator.cpuClass = x64

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 = 리눅스 i686

64 비트 Ubuntu (x86_64) + 32 비트 Chrome :
window.navigator.platform = 리눅스 i686

64 비트 Ubuntu + 64 비트 Epiphany :
window.navigator.platform = Linux x86_64

지금까지이 코드를 사용했습니다.

deployJava.isWin64OS = function() {
    return navigator.userAgent.indexOf('WOW64')>-1 || window.navigator.platform=='Win64';
};

1
정확하지 않습니다. Windows 64 비트 (Chrome 64 비트 포함)도 "Win32"를 생성합니다.
Apollo

31

14000 개의 고유 한 사용자 에이전트 ( 여기에서 )를 분석 하여 다음 문자열을 찾아 보았습니다.

  • x86_64
  • x86-64
  • Win64
  • x64; (세미콜론을 조심하십시오! 그것이 없으면 당신은 거짓 긍정을 갖게 될 것입니다.)
  • amd64
  • AMD64
  • WOW64
  • x64_64

또한 명령어 세트가 다르고 Intel x86_64와 호환되지 않지만 다음을 감지 할 수 있습니다.

  • ia64
  • sparc64
  • ppc64
  • IRIX64

하지만 "64"또는 "x64"가 포함 된 것을 찾지 마십시오. Chrome의 빌드 번호, 스파이더 / 봇, 라이브러리, .NET 버전, 해상도 등은 여전히 ​​32 비트 (또는 기타) OS 인 동시에 문자열 'x64'를 포함 할 수 있습니다.

모든 문자열을 대소 문자를 구분하지 않고 검색 할 수 있습니다.

ARM에서 아무것도 찾을 수 없었습니다. 다른 사람일까요? 편집하십시오. 커뮤니티 위키입니다.


UA 문자열의 RegExp`/ \ barm / i에 대해 테스트하고 있습니다. "arm"앞의 단어 경계는 중요합니다. 그렇지 않으면 Ubuntu 9.10 (Karmic Koala)의 UA 문자열과도 일치합니다. 나는에서 일부 UA 문자열을 기준으로이 패턴 제작 한 useragentstring.com/pages/Allcode.google.com/p/google-web-toolkit/issues/detail?id=8038
롭 W

24

당신은 확인할 수 window.navigator.platform와를 window.navigator.cpuClass.

귀하의 상황은 확실하지 않지만 대부분의 다른 사이트에서 수행하는 작업을 고려하고 사용자가 다운로드 할 다운로드를 선택할 수 있도록합니다. 다른 컴퓨터를 위해 다운로드하거나 플래시 장치에 넣을 수도 있고 단순히 32 비트 버전이 64 비트 상자에서 실행되기를 원할 수도 있습니다. 이유가 무엇이든 저는 선택권을 갖고 싶습니다.


6
내가 일하는 곳에서는 오랫동안 모든 다운로드 옵션을 사용할 수 있었지만 사용자는 종종 시스템에 맞는 잘못된 버전을 다운로드하는 실수를 저지 릅니다.
exupero

1
대부분의 사용자는 확실하지 않을 때 첫 번째를 선택합니다. 사용자에게 추천하고 싶을 때이 버전을 먼저 배치하고 다른 버전보다 약간 더 크게 만들 수도 있습니다.
Philipp

4
Windows 7, 64 비트의 Firefox : navigator.cpuClass === undefined, navigator.platform === "Win32". 동일한 시스템에 IE9, navigator.cpuClsas === "x86". 둘 다 64 비트 Windows를 감지하는 데 전혀 사용되지 않습니다. 그래도 navigator.userAgent포함되어 WOW64있으므로 대답은 유효합니다.
Chris Morgan

19

가장 안정적인 솔루션은 아키텍처를 감지 한 다음 적절한 버전의 애플리케이션을 다운로드하고 설치하는 32 비트 로더 애플리케이션을 만드는 것입니다.

RC와 Pino의 다른 두 답변을 확인했습니다. 제안한 것과 동일한 문제로 인해 둘 다 작동하지 않습니다. 64 비트 Windows의 32 비트 IE는 플랫폼을 32 비트로 잘못 식별합니다. 대부분의 사람들이 64 비트 Windows에서 32 비트 IE를 실행하기 때문에 (플래시와 같은 많은 플러그인은 64 비트에서 사용할 수 없음) 많은 고유 식별 정보가 있습니다.

남자 이름


1
나는 질문에 직접 답하지 않기 때문에 누군가 (나가 아닌) 투표했다고 생각합니다. 그러나 그것은 내가하고 싶은 것을 성취하는 대안적인 방법입니다.
user9876

3
32 비트 IE에는 WOW64 토큰이 포함되어 있으므로 쉽게 선택할 수 있습니다.
Nathan Osman

제 생각에는 가장 사용자 친화적 인 솔루션입니다.
Radu

나는 이러한 설치 프로그램을 확실히 싫어하지만 옵션입니다. 사용자가 멋진 도구 모음을 설치하도록 강요하지 마십시오.
Vitim.us

9

브라우저는 32 비트 버전이고 OS는 64 비트 일 수 있다고 말했듯이 100 % 확실하지 않습니다.

브라우저를 감지하려면 다음 코드를 시도하십시오.

<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


5
이것은 원래의 질문을 다루지 않습니다. 32 비트 IE를 사용하는 64 비트 Windows 7 상자에서 "x86"이 생성됩니다. 질문은 브라우저 비트가 아닌 시스템 비트와 OS를 감지하라는 것입니다.
Pete

5

64 비트 IE window.navigator.platform가있는 64 비트 Windows의 경우 "Win64" window.navigator.cpuClass가되고 "x64"가됩니다.

32 비트 IE window.navigator.platform가있는 64 비트 Windows의 경우 "Win32" window.navigator.cpuClass가되고 "x86"이됩니다.

32 비트 Windows의 window.navigator.platform경우 "Win32" window.navigator.cpuClass가되고 정의되지 않을 것입니다 (제 생각에).

-

출처 : 누군가가 32 비트 또는 64 비트 프로세서를 사용하고 있는지 확인하기 위해 JavaScript를 사용하는 앱을 만들었습니다 . 여기 GitHub에서 코드를 볼 수 있습니다 .


마지막 요점에 대해 틀렸다고해서 사용자가 32 개이지만 Windows 시스템을 가지고 있다는 의미는 아닙니다. 실제로 위의 모든 내용은 OS가 아닌 브라우저 정보를 제공합니다.
Mo Beigi 2015

3

위의 멋진 검색 결과를 이러한 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

다음 코드를 사용했습니다.

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 비트 브라우저보다 플래시 플레이어의 보급률이 상당히 크기 때문에 ( http://www.adobe.com/products/player_census/ 참조) flashplayer / version_penetration.html ), 이것은 적어도 Mac에서 x32 브라우저를 감지하기에 충분할 것입니다.


1

모든 Internet Explorer 브라우저 용 64 비트 Windows의 64 비트 IE

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");

}

1

window.navigator.cpuClass 및 window.navigator.platform 모두 브라우저 플랫폼을 반환합니다. 시스템 플랫폼이 아닙니다. 따라서 64 비트 시스템에서 32 비트 브라우저를 실행하는 경우 두 변수 모두 32 비트를 반환합니다. 어느 것이 틀렸을까요.


1

이 오래된 질문을 발견하고 최근에 찾은 오픈 소스 라이브러리로 업데이트하는 것을 생각했습니다. 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있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.