webentwicklung-frage-antwort-db.com.de

prüfen Sie, ob der Browser Chrome oder Edge ist

Meine aktuelle Website kann nur im Chrome-Browser ausgeführt werden. Dazu habe ich Folgendes geprüft 

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

Aber auch für Edge wird es nur als "Chrome" zurückgegeben.

Wie kann ich den Zugriff nur mit dem Chrome-Browser zulassen?

10
Shaggy

Sie können den Benutzeragenten überprüfen und feststellen, ob es sich um Microsoft Edge handelt oder nicht, weil Microsoft Edge Edge/version in seiner Benutzeragentenzeichenfolge enthält.

//get user agent somehow here based on what you are working on
userAgent = Request.UserAgent;

if (userAgent.IndexOf("Edge") > -1)
{
   // maybe client's browser is Microsoft Edge
}

beispiel für Edge-Benutzeragenten-Zeichenfolgen

Mozilla/5.0 (X11; CrOS x86_64 6783.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Edge/12.0

Sehen Sie mehr hier und hier

Am Ende empfehle ich, die Funktionserkennung im Browser zu verwenden, anstatt auf Benutzeragenten zu reagieren.

17
Hamid Pourjam

Ich bin neugierig - was ist der Anwendungsfall? Egal, hier gehts:

Microsoft Edge UA-Zeichenfolge:

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

Ich erläutere warum in diesem Blogbeitrag.

Neowin berichtete kürzlich, dass der neue Browser von Microsoft für Windows 10, Spartan, die Chrome-UA-Zeichenfolge Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/39.0.2171.71 Safari/537.36 verwendet Edge/12.0 ″. Dies wird mit Absicht getan.

Sie werden auch bemerken, dass die gesamte Zeichenfolge mit "Edge/12.0" endet, was bei Chrome nicht der Fall ist.

Ich sollte darauf hinweisen, dass dies nicht eine rücksichtslose Abweichung von dem ist, was Microsoft mit IE 11 gemacht hat, was unter Windows 8 wie folgt lautet: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0) Gecko, wie in diesem Beitrag erklärt.

Was ist ein User Agent-Sniffing?

Häufig werden Web-Entwickler UA-Sniffing für die Browsererkennung durchführen. Mozilla erklärt es gut in ihrem Blog:

Das Bereitstellen verschiedener Webseiten oder Dienste für verschiedene Browser ist in der Regel eine schlechte Idee. Das Web ist für alle zugänglich, unabhängig davon, welchen Browser oder welches Gerät sie verwenden. Es gibt verschiedene Möglichkeiten, Ihre Website so zu entwickeln, dass sie sich schrittweise durch die Verfügbarkeit von Funktionen verbessert und nicht auf bestimmte Browser abzielt.

Hier ist ein großartiger Artikel, der den Verlauf des Benutzeragenten erläutert.

Oft suchen faule Entwickler nur nach dem UA-String und deaktivieren den Inhalt ihrer Website basierend auf dem Browser, von dem sie glauben, dass er den Zuschauer verwendet. Internet Explorer 8 ist ein häufiger Frustrationspunkt für Entwickler. Daher wird häufig überprüft, ob ein Benutzer eine beliebige IE-Version verwendet, und Funktionen werden deaktiviert.

Das Edge-Team beschreibt dies in ihrem Blog noch ausführlicher.

Alle Zeichenfolgen für Benutzeragenten enthalten mehr Informationen zu anderen Browsern als den von Ihnen verwendeten Browser - nicht nur Token, sondern auch "aussagekräftige" Versionsnummern.

UA-String von Internet Explorer 11:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv: 11.0) wie Gecko

Microsoft Edge UA-Zeichenfolge:

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

Die Eigenschaft userAgent wurde von Patrick H. Lauke in den W3C-Diskussionen treffend als "eine ständig wachsende Zahl von Lügen" beschrieben. (Oder eher ein Balanceakt, bei dem genügend alte Schlüsselwörter hinzugefügt werden, ohne dass der alte UA-Sniffing-Code sofort verschwindet, während immer noch versucht wird, ein paar wirklich nützliche und genaue Informationen zu vermitteln. “

Wir empfehlen Webentwicklern, UA-Sniffing so weit wie möglich zu vermeiden. Moderne Web-Plattform-Funktionen sind fast alle auf einfache Weise erkennbar. Im vergangenen Jahr haben wir einige UA-Sniffing-Sites gesehen, die aktualisiert wurden, um Microsoft Edge zu ermitteln. Lediglich um einen alten IE11-Codepfad bereitzustellen. Dies ist nicht der beste Ansatz, da Microsoft Edge dem Verhalten von 'WebKit' und nicht dem Verhalten von IE11 entspricht (alle Unterschiede zwischen Edge und WebKit sind Fehler, die an einer Behebung interessiert sind). 

Unserer Erfahrung nach kann Microsoft Edge am besten mit den WebKit-Codepfaden auf diesen Websites ausgeführt werden. Wenn das Internet auf einer größeren Anzahl von Geräten verfügbar ist, gehen Sie bitte davon aus, dass unbekannte Browser gut sind. Bitte beschränken Sie Ihre Website nicht darauf, nur mit einem kleinen Satz bekannter Browser zu arbeiten. Wenn Sie dies tun, wird Ihre Website in Zukunft mit Sicherheit mit Sicherheit brechen.

Schlussfolgerung

Durch die Präsentation des Chrome-UA-Strings können wir die Hacks umgehen, die diese Entwickler verwenden, um Benutzern die beste Erfahrung zu bieten.

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

Arbeitete für mich.

1
meJustAndrew

Ich verwende die Browsererkennung bei der Protokollierung von JavaScript-Fehlern, da es nützlich ist zu wissen, in welchem ​​Browser der Fehler aufgetreten ist. 

Ursprünglich aus dieser Frage habe ich einen Eintrag im App_Browsers-Ordner verwendet:

<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>

Dies war jedoch inkonsistent und manchmal wurde auch noch Chrome gemeldet, daher verwende ich jetzt zusätzlich diese Wrapper-Klasse:

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