web-dev-qa-db-fra.com

Message disant "votre navigateur n'est pas pris en charge" dans l'environnement d'entreprise?

Beaucoup d'encre a déjà été renversée sur les raisons pour lesquelles la fameuse chaîne useragent ne doit pas être utilisée pour l'analyse du navigateur, et donner un message à l'utilisateur qu'il doit mettre à niveau son navigateur ou le site ne fonctionnera pas. Les principaux arguments sont les suivants:

  1. Les navigateurs peuvent usurper la chaîne, elle n'est donc pas fiable.
  2. La chaîne est un gâchis total sans bonne structure définie
  3. Il est paresseux de refuser des fonctionnalités ou l'accès à votre site, car vous ne voulez pas prendre en charge/tester sur des navigateurs autres que Chrome.
  4. Vous ne pouvez pas changer le comportement des gens, ils ne se mettront pas à niveau parce que vous vous dites.

Bien. Maintenant, je suis dans une situation où je pourrais penser que l'utilisation de la chaîne useragent est plus légitime et j'aimerais avoir une entrée. Nous sommes une petite entreprise qui propose un produit logiciel. Ce produit nécessite une application Web pour effectuer certaines tâches. Nous ne prenons actuellement en charge que les versions récentes des principaux navigateurs. Cela signifie que IE9 ou opera ne sont pas entièrement pris en charge. Lorsqu'un utilisateur de notre produit se connecte sur notre application Web, il recevra un avertissement (pas une fenêtre pop-up, juste un message) indiquant son Le navigateur peut ne pas prendre en charge toutes les fonctionnalités. Les raisons pour lesquelles je pense que cet avertissement ne souffre pas des problèmes mentionnés ci-dessus et est en fait un avertissement "Nice to have" juste avant de vous connecter, sont:

  1. Dans les environnements d'entreprise, les gens s'en tiennent généralement aux paramètres par défaut non hacky. Usurper une chaîne utilisateur n'a aucun gain, seulement de la douleur? donc la chaîne sera presque toujours correcte.
  2. L'analyse de la chaîne useragent est très simple si vous voulez savoir s'il s'agit d'une version récente d'un navigateur majeur. Je n'ai pas besoin de vérifier l'appareil ou les navigateurs spéciaux.
  3. Il ne s'agit pas d'être paresseux. Nous n'avons que le temps de développer l'application pour les plateformes x et Y, et si vous utilisez une autre plateforme, nous ne pouvons pas vous vendre notre produit. Nous voulons être sûrs à 100% que ce que vous achetez est utilisable et testé.
  4. Les entreprises connaissent les exigences de notre produit avant de l'acheter.

Y a-t-il de graves défauts dans mon raisonnement? Ou peut-être d'autres raisons pour lesquelles l'utilisation de la chaîne useragent entraînera l'apparition ou non du message de manière inappropriée? Cela nuira-t-il à la crédibilité de notre produit s'il est jugé "non professionnel" ou "insultant" si nous refusons le navigateur de quelqu'un?

19
user1884155

Si vous êtes dans une entreprise, vous contrôlez vos utilisateurs. Il existe différentes façons de les verrouiller sur le navigateur qu'ils sont autorisés à utiliser, que ce soit via une image, une stratégie de groupe, des paramètres de pare-feu, etc. Maintenant, par vous, je veux dire évidemment ceux de l'entreprise qui ont les autorisations pour le faire donc.

Cependant, si vous ne voulez pas parcourir tous ces cercles et que vous souhaitez détecter le navigateur sur lequel ils se trouvent et procéder en conséquence, la meilleure pratique consiste depuis longtemps à utiliser la détection des fonctionnalités , pas de reniflement d'agent utilisateur.

Ma ressource préférée est Modernizr par Paul Irish et son équipe.

Dans son article, Apprivoiser le Web sans loi avec détection de fonctionnalités, Jonathan Sampson déclare ce qui suit:

Ne pariez pas avec de mauvaises pratiques

Renifler la chaîne de l'agent utilisateur d'un navigateur, c'est un peu comme jouer à la roulette russe. Bien sûr, vous avez peut-être évité la chambre chargée cette fois, mais si vous continuez à jouer, vous augmenterez inévitablement vos chances de faire une erreur plutôt méchante.

La chaîne navigator.userAgent n'est pas et n'a jamais été immuable. Ça change. Il est modifié. Au fur et à mesure que les navigateurs sont lancés, que de nouvelles versions sont distribuées, que les navigateurs sont installés sur différents systèmes d'exploitation, que les logiciels sont installés en parallèle au navigateur et que les modules complémentaires sont installés dans le navigateur, cette chaîne est modifiée. Donc ce que vous reniflez aujourd'hui n'est pas ce que vous reniflerez demain.

Jetez un coup d'œil à quelques exemples de Chrome , Firefox , Opera et Internet Explorer . En fin de compte, vous ne pouvez pas être sûr de ce que vous obtiendrez lorsque vous approcherez du buffet de chaînes d'agent utilisateur. Comme il est immédiatement clair, l'approche ci-dessus ne correspondrait même pas à la version 12 de Opera de manière cohérente avec ses variations.

Alors, je vous ai complètement convaincu que renifler est mauvais? Et l'avez-vous juré aussi longtemps que vous vivrez? Permettez-moi de vous donner quelque chose pour le remplacer; quelque chose de fiable qui ne vous laissera presque jamais tomber - la détection des fonctionnalités.

Allez avec ce qui est fiable

La détection des fonctionnalités consiste à tester le navigateur, directement lié à la fonctionnalité dont vous avez besoin, et à voir si elle réussit ou échoue. Par exemple, nous pouvons voir si le navigateur prend en charge le <video> tag en le questionnant pour savoir s'il place les bonnes propriétés sur une instance fraîchement créée de l'élément. Si le navigateur ne parvient pas à ajouter le .canPlayType méthode à l'élément, nous pouvons supposer que le support n'est pas là, ou n'est pas suffisant pour être fiable.

Cette approche ne nous oblige pas à faire d'hypothèses. Nous ne couplons pas des données mal récupérées avec des hypothèses naïves sur les navigateurs qui prennent en charge quelle fonctionnalité. Nous invitons plutôt le navigateur sur notre scène et nous lui demandons de faire des tours. S'il réussit, nous le récompensons. S'il échoue, nous l'abandonnons et adoptons une autre approche.

Le travail a été fait pour vous

Vous pourriez à juste titre être flippé à propos de tous les tests que vous auriez à passer. Vous voudrez peut-être voir si localStorage est pris en charge, les dégradés, la vidéo, l'audio ou la géolocalisation. Qui sur Terre a le temps de passer tous ces tests? Sans parler d'apprendre les différentes technologies suffisamment pour le faire? C'est là que la communauté a sauvé la situation.

Modernizr est une bibliothèque open source remplie de tests de détection de fonctionnalités rédigés par des dizaines de développeurs talentueux, et tous regroupés dans une solution facile à utiliser que vous pouvez insérer dans n'importe quel nouveau projet. Vous créez votre téléchargement personnalisé de Modernizr, le déposez dans votre projet, puis offrez conditionnellement la meilleure expérience possible à tous les visiteurs.

Modernizr expose un objet Modernizr global avec diverses propriétés. Vous pouvez tester la prise en charge de certaines fonctionnalités simplement en appelant des propriétés sur l'objet Modernizr.

if ( Modernizr.video ) {
    // Browser supports the video element
}

De plus, il peut éventuellement ajouter des classes à votre élément afin que votre CSS puisse également participer à l'action! Cela vous permet d'apporter des ajustements conditionnels à votre document en fonction de la prise en charge des fonctionnalités.

html.video {
    /* Woot! Video support. */
}

html.no-video #custom-video-controls {
    /* Bummer. No video support. */
    display: none;
}
29
Code Maverick

Vos raisons initiales pour ne pas faire confiance au useragent trouvé dans l'objet navigator sont correctes. Pour répondre à votre question, j'aimerais ajouter quelque chose aux n ° 1 et n ° 2. Les navigateurs modifient souvent la valeur de useragent.

Dans mon navigateur actuel, le résultat de window.navigator.userAgent est:

"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36"

Alors, quel navigateur est-ce que j'utilise? Mozilla? Safari? Chrome? En ce moment, je lance Chrome v34. L'autre jour, je l'ai fait dans Chrome et Chrome n'apparaissait même pas dans le userAgent chaîne. Je crois comprendre que les navigateurs modifient souvent cette valeur pour contourner les sites qui tentent de détecter le navigateur.

Donc, ma principale préoccupation serait la validité de l'analyse de la chaîne userAgent. Mais WhichBrowser est souvent précis (je l'ai fait apparaître incorrectement auparavant, mais presque jamais).

En supposant que vous obtenez un résultat précis dans votre analyse, cela ne nuirait pas beaucoup à la réputation, voire pas du tout. Beaucoup dans le monde de l'entreprise ont l'habitude de voir des directives strictes concernant les logiciels ou les versions de logiciels qu'ils sont autorisés à utiliser. Il semble que vous n'aurez qu'à afficher un avertissement pour leur faire savoir que le produit n'est pas optimisé pour leur navigateur. Tant que ce n'est qu'un avertissement similaire à cela, ça devrait aller. Si vous leur interdisez explicitement d'y accéder via votre navigateur, cela entraînerait des problèmes.

4
EnigmaRM

Here Ci-dessus est un exemple de bonne et raisonnable UX sur la détection d'une version de navigateur qui peut rencontrer des problèmes.

Il décrit brièvement le comportement errant, évitant ainsi de nombreuses demandes d'aide. Il dit essentiellement: "si vous continuez, vous êtes seul."

J'ai continué BTW sans difficulté. Mais s'il y en avait eu, je n'aurais pas pris la peine de demander de l'aide. J'avais été prévenu.

1
DocSalvager