web-dev-qa-db-fra.com

vérifier si le navigateur est chrome ou bord

Mon site actuel ne fonctionne que dans le navigateur Chrome. Pour ce faire, j'ai vérifié de la manière suivante. 

if (Request.Browser.Browser == "Chrome")
{
   // Allow
}

Mais pour Edge aussi, il renvoie uniquement "Chrome".

Comment puis-je autoriser l'accès à partir du navigateur Chrome uniquement?

10
Shaggy

Je suis curieux - quel est le cas d'utilisation? Peu importe, ici vous allez:

Chaîne UA Microsoft Edge:

Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome, 42.0.2311.135 Safari/537.36 Edge/12.10136

Je détaille pourquoi dans cet article de blog.

Neowin a récemment annoncé que le nouveau navigateur de Microsoft pour Windows 10, Spartan, utilise la chaîne Chrome UA, «Mozilla/5.0 (Windows NT 10.0; WOW64)» AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0 ″./ Cela est fait exprès.

Vous remarquerez également que toute la chaîne se termine par «Edge/12.0», ce que Chrome ne fait pas.

Je tiens à souligner que ce n’est pas un changement radical par rapport à ce que Microsoft a fait avec IE 11, qui sous Windows 8 se lit comme suit: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; retour: 11.0) comme Gecko, comme expliqué dans ce post.

Qu'est-ce que l'agent utilisateur détecte?

Souvent, les développeurs Web recherchent un UA pour la détection du navigateur. Mozilla l'explique bien sur son blog:

Servir différentes pages Web ou services à différents navigateurs est généralement une mauvaise idée. Le Web doit être accessible à tous, quel que soit le navigateur ou le périphérique utilisé. Il existe des moyens de développer votre site Web pour s’améliorer progressivement en fonction de la disponibilité des fonctionnalités plutôt que de cibler des navigateurs spécifiques.

Voici un excellent article expliquant l'histoire de l'agent utilisateur.

Souvent, les développeurs paresseux détectent simplement la chaîne d'agent utilisateur et désactivent le contenu de leur site Web en fonction du navigateur qu'ils pensent que le spectateur utilise. Internet Explorer 8 étant un point commun de frustration pour les développeurs, ceux-ci vérifient fréquemment si un utilisateur utilise N'IMPORTE QUELLE version d'IE, et désactivent des fonctionnalités.

L'équipe Edge détaille cela encore plus profondément sur leur blog.

Toutes les chaînes d’agent utilisateur contiennent plus d’informations sur les autres navigateurs que le navigateur que vous utilisez actuellement - pas seulement des jetons, mais également des numéros de version «significatifs».

Chaîne d'AU de Internet Explorer 11:

_ {Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0) comme Gecko} _

Chaîne UA Microsoft Edge:

Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome, 42.0.2311.135 Safari/537.36 Edge/12.10136

La propriété userAgent a été décrite avec justesse comme «un paquet de mensonges toujours croissant» par Patrick H. Lauke dans les discussions sur le W3C. ("Ou plutôt, un problème d'équilibre consistant à ajouter suffisamment de mots clés classiques qui ne laisseront pas immédiatement tomber l'ancien code de détection d'UA, tout en essayant de transmettre un peu d'informations réellement utiles et précises.")

Nous recommandons aux développeurs Web d’éviter autant que possible de renoncer à l’UA; les fonctionnalités modernes de la plate-forme Web sont presque toutes détectables facilement. Au cours de l’année écoulée, certains sites de détection d’UA ont été mis à jour pour détecter Microsoft Edge… uniquement dans le but de lui fournir un chemin de code IE11 hérité. Ce n’est pas la meilleure approche, car Microsoft Edge correspond aux comportements ‘WebKit’, et non aux comportements IE11 (toute différence entre Edge et WebKit est un bogue que nous souhaitons corriger). 

Selon notre expérience, Microsoft Edge fonctionne mieux sur les chemins de code «WebKit» de ces sites. En outre, Internet devenant disponible sur une plus grande variété de périphériques, supposez que les navigateurs inconnus sont bons. Ne limitez pas votre site à un fonctionnement limité sur un petit nombre de navigateurs connus. Si vous faites cela, votre site va probablement casser à l'avenir.

Conclusion

En présentant la chaîne Chrome UA, nous pouvons contourner les astuces que ces développeurs utilisent pour présenter aux utilisateurs la meilleure expérience possible.

2
Dave Voyles - MSFT
if(HttpContext.Current.Request.UserAgent.Contains("Edge"))
{
   // Allow
}

Travaillé pour moi.

1
meJustAndrew

J'utilise la détection de navigateur lors de la consignation des erreurs JavaScript, car il est utile de savoir dans quel navigateur l'erreur s'est produite. 

Originaire de cette question j'ai utilisé une entrée dans le dossier App_Browsers:

<browser id="Edge" parentID="Chrome">
  <identification>
    <userAgent match="Edge/(?'version'(?'major'\d+)(?'minor'\.\d+))" />
  </identification>
  <capabilities>
    <capability name="browser" value="Edge" />
    <capability name="version" value="${version}" />
    <capability name="majorversion" value="${major}" />
    <capability name="minorversion" value="${minor}" />
  </capabilities>
</browser>

Mais ceci était incohérent et parfois signalait encore Chrome, alors maintenant j'utilise en plus cette classe de wrapper:

using System.Web;

public class BrowserInfo
{
    public BrowserInfo(HttpRequestBase request)
    {
        if (request.Browser != null)
        {
            if (request.UserAgent.Contains("Edge")
                && request.Browser.Browser != "Edge")
            {
                Name = "Edge";
            }
            else
            {
                Name = request.Browser.Browser;
                Version = request.Browser.MajorVersion.ToString();
            }
            Browser = request.Browser;
            Platform = request.Browser.Platform;
            IsMobileDevice = request.Browser.IsMobileDevice;
            if (IsMobileDevice)
            {
                Name = request.Browser.Browser;
                Name = request.Browser.Browser;
            }
        }
    }

    public HttpBrowserCapabilitiesBase Browser { get; }
    public string Name { get; }
    public string Version { get; }
    public string Platform { get; }
    public bool IsMobileDevice { get; }
    public string MobileBrand { get; }
    public string MobileModel { get; }
}
0
AGB