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 über das Feld User Agent 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 häufig, und wir haben wahrscheinlich irgendwo einen Opera-Benutzer. Vielleicht auch ein Chrome-Nutzer. Ich weiß, dass 64-Bit-Windows 7 mit 32-Bit- und 64-Bit-Versionen von IE geliefert wird, 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 es tun . Aber die Leute lesen die Optionen nicht . Deshalb wollte ich standardmäßig den richtigen Download bereitstellen, um die Benutzerfreundlichkeit zu verbessern. Natürlich, obwohl dies hilfreich ist Wenn ich es richtig verstehe, ist es äußerst wenig hilfreich, wenn ich es falsch verstehe. Und nach den bisherigen Antworten sieht es nicht so aus, als gäbe es einen zuverlässigen Weg, dies zu tun.
quelle
Antworten:
Versuchen Sie dies und suchen Sie in der User-Agent-Zeichenfolge nach WOW64 (32-Bit auf 64-Bit) oder Win64 (natives 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"); }
quelle
window.navigator.platform
als win32 gemeldet wird. Ich habe es in Safari 4 / Win versucht. spätere Versionen können sich ändern.Ich habe einige Tests gemacht. Hier sind die Ergebnisse, hoffe es hilft:
Bisher habe ich diesen Code verwendet:
deployJava.isWin64OS = function() { return navigator.userAgent.indexOf('WOW64')>-1 || window.navigator.platform=='Win64'; };
quelle
Bei der Analyse von ungefähr 14000 eindeutigen Benutzeragenten ( von hier aus ) habe ich die folgenden Zeichenfolgen gefunden:
Obwohl sie unterschiedliche Befehlssätze haben und nicht mit Intel x86_64 kompatibel sind, möchten Sie möglicherweise Folgendes erkennen:
Beachten Sie jedoch, 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 können auch die Zeichenfolge "x64" enthalten, während sie noch ein 32-Bit-Betriebssystem (oder ein anderes Betriebssystem) sind.
Beachten Sie, dass Sie nach all diesen Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung suchen können.
Ich konnte auf ARM nichts finden. Vielleicht jemand anderes? Bitte bearbeiten, es ist ein Community-Wiki.
quelle
Sie können das
window.navigator.platform
und das überprüfenwindow.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 den Benutzer auswählen zu lassen, welchen Download er erhält. Sie können es für einen anderen Computer herunterladen, ein Flash-Gerät installieren oder einfach nur die 32-Bit-Version auf ihrer 64-Bit-Box ausführen. Was auch immer der Grund sein mag, ich hätte lieber die Wahl.
quelle
navigator.cpuClass === undefined
,navigator.platform === "Win32"
. IE9 auf demselben Computer ,navigator.cpuClsas === "x86"
. Keines davon ist für die Erkennung von 64-Bit-Windows von Nutzen.navigator.userAgent
enthältWOW64
jedoch, so dass die Antwort gültig ist.Die zuverlässigste Lösung wäre, eine 32-Bit-Loader-Anwendung 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 aufgrund des von Ihnen vorgeschlagenen Problems nicht. Der 32-Bit-IE unter 64-Bit-Windows identifiziert die Plattform fälschlicherweise als 32-Bit. Da die meisten Leute 32-Bit-IE unter 64-Bit-Windows ausführen (viele Plugins, z. B. Flash, sind in 64-Bit nicht verfügbar), gibt es viele ungenaue Identifikationen
Lee
quelle
Nicht mit 100% iger Sicherheit, wie Sie sagen, der Browser könnte 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>
Für IE.
http://msdn.microsoft.com/en-us/library/ms531090%28VS.85%29.aspx
Kommerzielles Produkt: https://www.cyscape.com/showbrow.aspx
quelle
Für 64-Bit-Windows mit 64-Bit-IE
window.navigator.platform
ist "Win64" undwindow.navigator.cpuClass
"x64".Für 64-Bit-Windows mit 32-Bit-IE ist
window.navigator.platform
"Win32" undwindow.navigator.cpuClass
"x86".Für 32-Bit-Windows
window.navigator.platform
wird "Win32" sein undwindow.navigator.cpuClass
wird undefiniert sein (glaube ich).- -
Quelle: Ich habe eine App erstellt, die mithilfe von JavaScript ermittelt, ob jemand einen 32-Bit- oder 64-Bit-Prozessor verwendet . Sie können den Code hier auf GitHub sehen .
quelle
Ich habe die Ergebnisse der netten Suche oben 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!
quelle
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 hat überall funktioniert, wenn man Mac-Computer erwartet. Und leider scheint es nicht möglich zu sein, diese Informationen über JavaScript abzurufen :(. Dort könnte jedoch noch ein weiterer Trick ausgeführt werden. Da Adobe Flash Player in x64-Browsern nicht unterstützte, können Sie einfach versuchen, sie zu erkennen. Wenn die Erkennung erfolgreich ist, als es definitiv ein 32-Bit-Browser ist, wenn nein, dann ist es ein 32-Bit-Browser ohne Flash-Plugin oder ein 64-Bit-Browser, da die Penetrationsrate des Flash-Players ziemlich hoch ist (siehe http://www.adobe.com/products/player_census/). flashplayer / version_penetration.html ), dies sollte gut genug sein, um zumindest den x32-Browser unter Mac zu erkennen.
quelle
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"); }
quelle
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 Varibales 32-Bit zurück. Welches wäre falsch.
quelle
Ich habe diese alte Frage gefunden und überlegt, sie mit einer kürzlich gefundenen Open-Source-Bibliothek zu aktualisieren: https://github.com/faisalman/ua-parser-js
Gemäß den Dokumenten die Methode
getCPU()
returns { architecture: '' }
mit den folgenden möglichen Werten :68k, amd64, arm, arm64, avr, ia32, ia64, irix, irix64, mips, mips64, pa-risc, ppc, sparc, sparc64
.quelle