it-swarm.com.de

64-Bit- oder 32-Bit-Windows über User Agent oder Javascript erkennen?

Ich möchte die richtige Version eines Downloads anbieten. Die Versionen, die ich habe, sind:

  • 32-Bit-Windows
  • 64-Bit-Windows
  • Linux

Das Erkennen von Linux mithilfe des User Agent-Felds ist einfach. Aber ist es möglich, zuverlässig herauszufinden, ob Windows 32-Bit oder 64-Bit ist?

Benutzer verwenden möglicherweise seltsame Browser - IE und Firefox sind weit verbreitet, und wir haben wahrscheinlich irgendwo einen Opera Benutzer. Vielleicht auch ein Chrome Nutzer. Ich weiß, dass 64-Bit-Versionen von Windows 7 mit 32-Bit- und 64-Bit-Versionen von IE ausgeliefert werden, und ich möchte beiden die 64-Bit-Version meines Downloads senden.

(Bearbeitet, um hinzuzufügen: Ich weiß, dass ich alle Optionen bereitstellen sollte, und ich werde. Aber Leute lesen die Optionen nicht . Also wollte ich standardmäßig den richtigen Download bereitstellen, um die Benutzerfreundlichkeit zu verbessern. Das ist zwar hilfreich, wenn ich es richtig mache, aber äußerst wenig hilfreich, wenn ich es falsch mache. Und nach den bisherigen Antworten scheint es keinen verlässlichen Weg zu geben, dies zu tun.

75
user9876

Versuchen Sie dies, und suchen Sie in der User-Agent-Zeichenfolge nach WOW64 (32-Bit auf 64-Bit) oder Win64 (native 64-Bit).

    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");
    }
52
saschabeaumont

Ich habe einige Tests gemacht. Hier sind die Ergebnisse, hoffe es hilft:

 64-Bit-MacOS + 64-Bit-Safari oder 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 (oder Chrome): 
 Window.navigator.platform = Win32 
 
 32-Bit Linux Mint (i686) + Firefox: 
 Fenster .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 

Bisher habe ich diesen Code verwendet:

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

Bei einer Analyse um 14000 eindeutige Benutzeragenten ( von hier ) habe ich die folgenden Zeichenfolgen gefunden, nach denen gesucht werden muss:

  • x86_64
  • x86-64
  • Win64
  • x64; (Beachten Sie das Semikolon! Ohne es haben Sie falsch-positive Ergebnisse.)
  • AMD64
  • AMD64
  • WOW64
  • x64_64

Darüber hinaus möchten Sie möglicherweise Folgendes erkennen, obwohl sie unterschiedliche Befehlssätze haben und nicht mit Intel x86_64 kompatibel sind:

  • ia64
  • sparc64
  • ppc64
  • IRIX64

Achten Sie jedoch darauf, dass Sie nicht nur nach etwas suchen, das "64" oder sogar "x64" enthält. Die Build-Nummern, Spider/Bots, Bibliotheken, .NET-Versionen, Auflösungen usw. von Chrome enthalten möglicherweise auch die Zeichenfolge "x64", obwohl sie immer noch ein 32-Bit-Betriebssystem (oder ein anderes Betriebssystem) sind.

Beachten Sie, dass Sie alle diese Zeichenfolgen unabhängig von der Groß- und Kleinschreibung suchen können.

Ich konnte auf ARM nichts finden. Vielleicht jemand anderes? Bitte editieren, es ist ein Community-Wiki.

29
Luc

Sie können das window.navigator.platform und die window.navigator.cpuClass.

Ich bin mir nicht sicher, in welcher Situation Sie sich befinden, aber ich würde in Betracht ziehen, nur das zu tun, was die meisten anderen Websites tun, und dem Benutzer zu überlassen, welchen Download er erhält. Sie könnten es für einen anderen Computer herunterladen, ein Flash-Gerät aufsetzen oder einfach möchten, dass die 32-Bit-Version auf ihrer 64-Bit-Box ausgeführt wird. Aus welchem ​​Grund auch immer, ich hätte lieber die Wahl.

24
RC.

Die zuverlässigste Lösung wäre, eine 32-Bit-Ladeprogrammanwendung zu erstellen, die die Architektur erkennt und dann die entsprechende Version Ihrer Anwendung herunterlädt und installiert.

Ich habe die beiden anderen Antworten von RC und Pino überprüft. Beide funktionieren nicht aufgrund des von Ihnen vorgeschlagenen Problems - 32-Bit IE unter 64-Bit-Windows identifiziert die Plattform fälschlicherweise als 32-Bit. Da die meisten Benutzer 32-Bit = ausführen IE unter 64-Bit-Windows (viele Plugins, z. B. Flash, sind in 64-Bit-Versionen nicht verfügbar), es wird eine Menge ungenauer Identifikationen geben

Lee

18
Lee Atkinson

Nicht mit 100% iger Gewissheit, wie Sie sagen, könnte der Browser eine 32-Bit-Version sein, während das Betriebssystem eine 64-Bit-Version ist.

Versuchen Sie den folgenden Code, um den Browser zu erkennen:

<script language=javascript>   
  <!--   
  document.write("CPU :"+window.navigator.cpuClass);   
  //-->   
</script> 

CPU: ia64

Für IE.

http://msdn.Microsoft.com/en-us/library/ms531090%28VS.85%29.aspx

Kommerzielles Produkt: https://www.cyscape.com/showbrow.aspx

8
LiamB

Für 64-Bit-Windows mit 64-Bit ist IE window.navigator.platform "Win64" und window.navigator.cpuClass "X64".

Für 64-Bit-Windows mit 32-Bit-IE lautet window.navigator.platform "Win32" und window.navigator.cpuClass "X86".

Für 32-Bit-Windows ist window.navigator.platform "Win32" und window.navigator.cpuClass Undefiniert (glaube ich).

-

Quelle: Ich habe eine App erstellt, die JavaScript verwendet, um festzustellen, ob jemand einen 32-Bit- oder 64-Bit-Prozessor verwendet . Sie können den Code hier auf GitHub sehen .

4
peterhurford

Ich habe die Ergebnisse der obigen Nizza-Suche in diesen JS-Funktionen wieder aufgenommen. Ich hoffe, sie können allen hier helfen, schnell auf ihre Bedürfnisse zu reagieren (und auch auf meine!)

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 ; }

Probier es aus:

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

Danke an alle!

3
Sandro Rosa

Ich habe folgenden Code verwendet:

var is32BitBrowser = true;
if( window.navigator.cpuClass != null && window.navigator.cpuClass.toLowerCase() == "x64" )
   is32BitBrowser = false;
if( window.navigator.platform.toLowerCase() == "win64" )
   is32BitBrowser = false;

Es funktionierte überall, außer Mac-Computern. Und leider scheint es nicht möglich zu sein, diese Informationen über JavaScript abzurufen :(. Es könnte jedoch ein weiterer Trick ausgeführt werden. Da Adobe Flash Player auf x64-Browsern nicht unterstützt, können Sie einfach versuchen, sie zu erkennen. Wenn die Erkennung erfolgreich ist, dann ist es definitiv ein 32-Bit-Browser, wenn nein, dann ist es ein 32-Bit-Browser ohne Flash-Plugin oder ein 64-Bit-Browser. Weil die Durchdringungsrate des Flash-Players ziemlich hoch ist (siehe http://www.Adobe.com/ products/player_census/flashplayer/version_penetration.html ), sollte dies gut genug sein, um mindestens den x32-Browser unter Mac zu erkennen.

2
GermanZ

Sowohl window.navigator.cpuClass als auch window.navigator.platform geben die Browserplattform zurück. Nicht die Systemplattform. Wenn Sie also einen 32-Bit-Browser auf einem 64-Bit-System ausführen, geben beide Variablen 32-Bit zurück. Welches wäre falsch.

1
Dan

64-Bit IE unter 64-Bit-Windows für jeden Internet Explorer-Browser

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
ashish

Ich habe diese alte Frage gefunden und darüber nachgedacht, sie mit einer kürzlich gefundenen Open-Source-Bibliothek zu aktualisieren: https://github.com/faisalman/ua-parser-js

Nach den Unterlagen, die Methode getCPU()returns { architecture: '' } mit folgenden möglichen Werten: 68k, AMD64, arm, arm64, avr, ia32, ia64, irix, irix64, mips, mips64, pa-risc, ppc, sparc, sparc64.

0
don