11
votes

Comment déterminer quelle version iPhone le code JavaScript s'exécute?

besoin de distinguer entre iPhone3x et iphone4x . Y a-t-il un moyen de comprendre la version de JavaScript s'il vous plaît?


1 commentaires

J'aurais souhaité de ne pas, mais il y a des incohérences qui ne laissent pas beaucoup d'espace pour une approche idéaliste ( Stackoverflow.com/questions/8298696/... ).


6 Réponses :


7
votes

Vous pouvez utiliser navigator.useragent pour vérifier la version du système d'exploitation, mais ce n'est pas vraiment le problème ici.

Ce que vous pouvez faire est d'utiliser les requêtes de média pour vérifier la résolution d'écran réelle de Le dispositif, qui pourrait être la cause du problème à la main. xxx

Vous pouvez également faire probablement sans JavaScript, en utilisant des requêtes de support pour charger différentes feuilles de style pour les affichages de rétine: < / p> xxx


1 commentaires

Point intéressant Bien que: sur iOS4 et Rhino, le Matchmedia est préférable de ne pas être appelé (un comportement inattendu avait été causé et a eu le temps de déboguer plus profondément).



-2
votes

Peut-être que vous pouvez vérifier en prenant la version du système d'exploitation dans la requête navigator.appversion.indexof ("... iPhone3G a Apple iOS 4.2.1 iPhone4 et 4s ont Apple iOS 5.0.1 mais iPhone3gs a la même chose.

En tant que variante, vous pouvez fournir un test de vitesse de la CPU en utilisant une grande boucle. Quelque chose comme pour (var i = 0, k = 1; i <5000000; i ++) k ++; et checkin consommé temps pour cela.

iPhone3G (s) a un maximum de 600 MHz et iPhone4 a 1 GHz. Ainsi, il y a une distinction et vous pouvez l'attraper après quelques tests (boucle) et définir la vitesse de boucle pour chaque génération d'iPhone.

Mais note, toutes ces manières sont rugueuses et n'auraient peut-être pas été correcte dans d'autres conditions.


0 commentaires

1
votes

Je suis tombé sur un problème similaire il y a un moment. Travaillant sur le site Web de client qui a eu de nombreuses vidéos chargées via JavaScript, j'ai découvert que le format vidéo dont ils avaient besoin d'utiliser avaient un taux de cadre étrange qui ne fonctionnait pas sur iPhone 3GS -.

Après l'approche de ANNLAD, je suis arrivé à Cette solution qui a parfaitement adapté ce dont j'avais besoin: xxx

première vérification si l'utilisateur vient à moi depuis un iPod ou un iPhone. Ensuite, il vérifie le support de la rétine. Comme seul iPhone 4+ le prend en charge, j'ai réussi à appeler les fichiers vidéo correct des appareils plus anciens.


0 commentaires

0
votes

Quelque chose sur les méthodes de mesure plus de vitesse de la CPU: ils peuvent être une approche "impropre" ici, mais trouver la puissance de calcul de votre appareil cible pourrait être utile pour certains cas.

Voici donc quelque chose que je veux ajouter à ces méthodes: au lieu de compter une valeur fixe et de mesurer l'heure, il serait plus robuste de compter pour un temps fixe puis de comparer les valeurs atteintes. Si votre utilisateur vous rend visite à un périphérique beaucoup plus lent, peut-être parce qu'il se trouve à l'intérieur d'un émulateur, il devra attendre que vous compteriez à n. Si vous aviez quitté la boucle après, dites 200ms, vous auriez simplement réacqué une valeur très basse et l'UX n'a ​​pas été influencé.

En outre, il est toujours agréable de savoir, combien de temps une opération prendra, elle réduit les incertitudes.


0 commentaires

8
votes

Ce serait une combinaison de deux méthodes en JavaScript:

p>

if ( isIphone() && iPhoneVersion() === "6"){
  //code..
}


3 commentaires

Martijn Pieters a supprimé cette post citant des réponses en double en tant que inacceptable. Reposter ici seulement.


Cela ne fonctionne pas si les personnes sélectionnent zoomé sur Paramètres> Affichage et luminosité> Vue.


@trungnnh a raison, régler "zoomé" changera la fenêtre.Screen.Width



7
votes

à l'aide de webgl_debug_renderer_info extension, qui fait partie du WebGL API A>, vous êtes capable de récupérer le fournisseur du GPU et du nom du rendu.

En combinant cela avec des dimensions de l'écran de l'appareil, vous pouvez définir avec précision la version. L'exemple de code ci-dessous montre comment vous pouvez le faire pour toutes les versions iPhone, y compris 3 et 4. P>

    // iPhone model checks.
function getiPhoneModel() {
    // Create a canvas element which can be used to retrieve information about the GPU.
    var canvas = document.createElement("canvas");
    if (canvas) {
        var context = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
        if (context) {
            var info = context.getExtension("WEBGL_debug_renderer_info");
            if (info) {
                var renderer = context.getParameter(info.UNMASKED_RENDERER_WEBGL);
            }
        }
    }

    // iPhone X
    if ((window.screen.height / window.screen.width == 812 / 375) && (window.devicePixelRatio == 3)) {
        return "iPhone X";
    // iPhone 6+/6s+/7+ and 8+
    } else if ((window.screen.height / window.screen.width == 736 / 414) && (window.devicePixelRatio == 3)) {
        switch (renderer) {
            default:
                return "iPhone 6 Plus, 6s Plus, 7 Plus or 8 Plus";
            case "Apple A8 GPU":
                return "iPhone 6 Plus";
            case "Apple A9 GPU":
                return "iPhone 6s Plus";
            case "Apple A10 GPU":
                return "iPhone 7 Plus";
            case "Apple A11 GPU":
                return "iPhone 8 Plus";
        }
    // iPhone 6+/6s+/7+ and 8+ in zoom mode
    } else if ((window.screen.height / window.screen.width == 667 / 375) && (window.devicePixelRatio == 3)) {
        switch(renderer) {
            default:
                return "iPhone 6 Plus, 6s Plus, 7 Plus or 8 Plus (display zoom)";
            case "Apple A8 GPU":
                return "iPhone 6 Plus (display zoom)";
            case "Apple A9 GPU":
                return "iPhone 6s Plus (display zoom)";
            case "Apple A10 GPU":
                return "iPhone 7 Plus (display zoom)";
            case "Apple A11 GPU":
                return "iPhone 8 Plus (display zoom)";
        }
    // iPhone 6/6s/7 and 8
    } else if ((window.screen.height / window.screen.width == 667 / 375) && (window.devicePixelRatio == 2)) {
        switch(renderer) {
            default:
                return "iPhone 6, 6s, 7 or 8";
            case "Apple A8 GPU":
                return "iPhone 6";
            case "Apple A9 GPU":
                return "iPhone 6s";
            case "Apple A10 GPU":
                return "iPhone 7";
            case "Apple A11 GPU":
                return "iPhone 8";
        }
    // iPhone 5/5C/5s/SE or 6/6s/7 and 8 in zoom mode
    } else if ((window.screen.height / window.screen.width == 1.775) && (window.devicePixelRatio == 2)) {
        switch(renderer) {
            default:
                return "iPhone 5, 5C, 5S, SE or 6, 6s, 7 and 8 (display zoom)";
            case "PowerVR SGX 543":
                return "iPhone 5 or 5c";
            case "Apple A7 GPU":
                return "iPhone 5s";
            case "Apple A8 GPU":
                return "iPhone 6 (display zoom)";
            case "Apple A9 GPU":
                return "iPhone SE or 6s (display zoom)";
            case "Apple A10 GPU":
                return "iPhone 7 (display zoom)";
            case "Apple A11 GPU":
                return "iPhone 8 (display zoom)";
        }
    // iPhone 4/4s
    } else if ((window.screen.height / window.screen.width == 1.5) && (window.devicePixelRatio == 2)) {
        switch(renderer) {
            default:
                return "iPhone 4 or 4s";
            case "PowerVR SGX 535":
                return "iPhone 4";
            case "PowerVR SGX 543":
                return "iPhone 4s";
        }
    // iPhone 1/3G/3GS
    } else if ((window.screen.height / window.screen.width == 1.5) && (window.devicePixelRatio == 1)) {
        switch(renderer) {
            default:
                return "iPhone 1, 3G or 3GS";
            case "ALP0298C05":
                return "iPhone 3GS";
            case "S5L8900":
                return "iPhone 1, 3G";
        }
    } else {
        return "Not an iPhone";
    }
}


0 commentaires