85 votes

Détection de Windows 64 bits ou 32 bits à partir de l'agent utilisateur ou de Javascript ?

Je veux proposer la bonne version d'un téléchargement. Les versions dont je dispose sont les suivantes :

  • Windows 32 bits
  • Windows 64 bits
  • Linux

Il est facile de détecter Linux à l'aide du champ User Agent, mais est-il possible de déterminer de manière fiable si Windows est 32 ou 64 bits ?

Les utilisateurs peuvent utiliser des navigateurs étranges - IE et Firefox sont courants, et nous avons probablement un utilisateur d'Opera quelque part ; peut-être aussi un utilisateur de Chrome. Je sais que Windows 7 64 bits est livré avec des versions 32 bits et 64 bits d'IE, et j'aimerais leur envoyer à tous deux la version 64 bits de mon téléchargement.

(Modifié pour ajouter : je sais que je devrais fournir toutes les options, et je le ferai. Mais les gens ne lisent pas les options . J'ai donc voulu fournir le bon téléchargement par défaut, pour améliorer la convivialité. Bien sûr, si cela est utile si je le fais correctement, c'est extrêmement inutile si je le fais mal. Et d'après les réponses obtenues jusqu'à présent, il semble qu'il n'y ait pas de moyen fiable de le faire).

1 votes

Il est surprenant que votre version de Linux fonctionne sur x86, x64 et ARM.

9 votes

La "version Linux" est un code source. Les versions Windows sont binaires.

55voto

saschabeaumont Points 14415

Essayez ceci : recherchez WOW64 (32 bits sur 64 bits) ou Win64 (64 bits natifs) dans la chaîne de caractères de l'agent utilisateur.

    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 votes

Cela fonctionne bien, sauf pour Safari sous Windows 7 64 bits, qui n'a pas WOW64, n'a pas Win64, et signale sa window.navigator.platform comme win32. Je l'ai essayé dans Safari 4/Win ; les versions ultérieures peuvent changer.

2 votes

Ce n'est pas précis à 100 %, mais c'est un bon indice, car il n'existe pas de meilleur moyen de le détecter de manière fiable.

0 votes

Je pense qu'il serait préférable de supposer que l'utilisateur a x64 à ce stade. L'utilisation d'un algorithme de détection opt-in pour détecter une architecture que plus de 99,5 % des consommateurs ont devrait maintenant produire plus de faux positifs que de supposer qu'ils l'ont tous.

41voto

mgabor6 Points 313

J'ai fait quelques tests. Voici les résultats, j'espère que cela vous aidera :

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

Jusqu'à présent, j'ai utilisé ce code :

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

2 votes

Ce n'est pas exact. Windows 64 bits avec Chrome 64 bits donne également "Win32".

31voto

Luc Points 448

Analyser autour 14000 agents-utilisateurs uniques ( d'ici ), j'ai trouvé les chaînes de caractères suivantes à rechercher :

  • x86_64
  • x86-64
  • Win64
  • x64 ; (Attention au point-virgule ! Sans lui, vous aurez des faux positifs).
  • amd64
  • AMD64
  • WOW64
  • x64_64

En outre, bien qu'ils aient des jeux d'instructions différents et ne soient pas compatibles avec Intel x86_64, vous pouvez détecter les éléments suivants :

  • ia64
  • sparc64
  • ppc64
  • IRIX64

Attention cependant, ne cherchez pas uniquement ce qui contient "64" ou même "x64". Les numéros de build de Chrome, les spiders/bots, les bibliothèques, les versions .NET, les résolutions, etc. peuvent également contenir la chaîne "x64" tout en restant un système d'exploitation 32 bits (ou autre).

Notez que vous pouvez rechercher toutes ces chaînes sans tenir compte de la casse.

Je n'ai pas été en mesure de trouver quoi que ce soit sur ARM. Peut-être quelqu'un d'autre ? Veuillez éditer, c'est un wiki communautaire.

0 votes

Je teste contre le RegExp `/'. \barm /i dans la chaîne UA. La limite du mot avant "arm" est importante, sinon cela correspondrait également à la chaîne UA pour Ubuntu 9.10 (Karmic Koala). J'ai construit ce modèle en me basant sur certaines chaînes d'UA à l'adresse suivante useragentstring.com/pages/All et code.google.com/p/google-web-toolkit/issues/detail?id=8038

24voto

RC. Points 15804

Vous pouvez vérifier le window.navigator.platform et le window.navigator.cpuClass .

Je ne connais pas votre situation, mais j'envisagerais de faire comme la plupart des autres sites et de laisser l'utilisateur choisir le téléchargement qu'il souhaite obtenir. Il pourrait le télécharger pour une autre machine, pour le mettre sur un périphérique flash, ou tout simplement pour que la version 32 bits fonctionne sur sa machine 64 bits. Quelle que soit la raison, je préfère avoir le choix.

6 votes

Là où je travaille, toutes les options de téléchargement sont disponibles depuis longtemps, mais les utilisateurs font souvent l'erreur de télécharger la mauvaise version pour leur système.

1 votes

La plupart des utilisateurs choisissent simplement le premier lorsqu'ils ne sont pas sûrs. Lorsque vous voulez donner une recommandation à l'utilisateur, vous pouvez placer cette version en premier et peut-être même la rendre un peu plus grande que les autres.

4 votes

Firefox sur Windows 7, 64 bits : navigator.cpuClass === undefined , navigator.platform === "Win32" . IE9 sur la même machine, navigator.cpuClsas === "x86" . Ni l'un ni l'autre ne sont d'une quelconque utilité pour détecter les Windows 64 bits. navigator.userAgent contient WOW64 Mais cette réponse est valable.

19voto

Lee Atkinson Points 875

La solution la plus fiable serait de créer une application de chargement 32 bits qui détecte l'architecture, puis télécharge et installe la version appropriée de votre application.

J'ai vérifié les deux autres réponses de RC et Pino. Elles ne fonctionnent pas toutes les deux à cause du même problème que vous suggérez : IE 32 bits sur Windows 64 bits identifiera à tort la plate-forme comme étant 32 bits. Comme la plupart des gens utilisent IE 32 bits sur Windows 64 bits (de nombreux plugins, comme Flash, ne sont pas disponibles en 64 bits), il y aura beaucoup d'identifications erronées.

Lee

1 votes

Je suppose que quelqu'un (pas moi) l'a rejeté parce qu'il ne répond pas directement à la question. Cependant, c'est un moyen alternatif d'accomplir ce que je veux faire.

3 votes

IE 32 bits inclut le jeton WOW64, il serait donc facile à repérer.

0 votes

La meilleure solution et la plus conviviale à mon avis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X