it-swarm-eu.dev

controlla se il browser è cromato o bordo

Il mio sito web corrente funziona solo nel browser Chrome, per fare ciò ho controllato in questo modo 

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

Ma per Edge pure sta ritornando solo come "Chrome".

Come posso consentire l'accesso solo dal browser Chrome?

10
Shaggy

È possibile controllare lo user-agent e vedere se si tratta di Microsoft Edge o meno, perché Microsoft Edge contiene Edge/version nella sua stringa user-agent.

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

esempio di stringhe user-agent Edge

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

Vedi di più qui e qui

Alla fine suggerisco di utilizzare il rilevamento delle funzionalità sul browser invece di agire sulla base di user-agent.

17
Hamid Pourjam

Sono curioso - qual è il caso d'uso? Indipendentemente da ciò, qui vai:

Stringa Microsoft Edge UA:

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

I detail why in this blog post.

Neowin ha recentemente segnalato che il nuovo browser Microsoft per Windows 10, Spartan, utilizza la stringa di Chrome UA, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, come Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0 ". Questo è fatto apposta.

Noterai inoltre che l'intera stringa termina con "Edge/12.0", che Chrome non ha.

Devo sottolineare che non si tratta di una distinzione da ciò che Microsoft ha fatto con IE 11, che su Windows 8 recita: Mozilla/5.0 (Windows NT 6.3, Trident/7.0; rv: 11.0) come Gecko, come spiegato in questo post.

Che cosa sta sniffando User Agent?

Spesso, gli sviluppatori web annunceranno il rilevamento del browser. Mozilla lo spiega bene sul loro blog:

Offrire pagine Web o servizi diversi a browser diversi è in genere una cattiva idea. Il Web è pensato per essere accessibile a tutti, indipendentemente dal browser o dispositivo che stanno utilizzando. Ci sono modi per sviluppare il tuo sito Web per migliorare progressivamente se stesso in base alla disponibilità delle funzionalità piuttosto che al targeting di browser specifici.

Ecco un grande articolo che spiega la storia dell'Agente Utente.

Spesso, gli sviluppatori pigri si limitano ad annusare la stringa UA ea disabilitare i contenuti sul proprio sito Web in base al browser in cui credono che lo spettatore stia utilizzando. Internet Explorer 8 è un punto comune di frustrazione per gli sviluppatori, pertanto controllano frequentemente se un utente utilizza QUALSIASI versione di IE e disabilita le funzionalità.

Il team di Edge dettaglia ulteriormente questo ancora più profondo sul loro blog.

Tutte le stringhe degli user agent contengono più informazioni sugli altri browser rispetto al browser corrente che si sta utilizzando, non solo token, ma anche numeri di versione "significativi".

Stringa UA di Internet Explorer 11:

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

Stringa Microsoft Edge UA:

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

La proprietà userAgent è stata giustamente descritta come "un branco di menzogne ​​in continua crescita" di Patrick H. Lauke nelle discussioni del W3C. ("O meglio, un atto equilibratore di aggiungere abbastanza parole chiave legacy che non avranno immediatamente il vecchio codice di sniffing UA che cade, mentre cercano ancora di trasmettere un po 'di informazioni effettivamente utili e accurate.")

Raccomandiamo agli sviluppatori web di evitare UA sniffing il più possibile; le moderne funzionalità della piattaforma web sono quasi tutte rilevabili in modo semplice. Nell'ultimo anno, abbiamo visto alcuni siti di sniffing UA che sono stati aggiornati per rilevare Microsoft Edge ... solo per fornirgli un percorso di codice IE11 legacy. Questo non è l'approccio migliore, poiché Microsoft Edge corrisponde ai comportamenti di "WebKit", non ai comportamenti di IE11 (eventuali differenze di Edge-WebKit sono bug che siamo interessati a risolvere). 

Nella nostra esperienza, Microsoft Edge funziona al meglio sui percorsi di codice "WebKit" in questi siti. Inoltre, con la disponibilità di Internet su una più ampia varietà di dispositivi, si supponga che i browser sconosciuti siano buoni: si prega di non limitare il sito a lavorare solo su un piccolo insieme di browser correnti conosciuti. Se lo fai, il tuo sito quasi certamente si romperà in futuro.

Conclusione

Presentando la stringa di Chrome UA, possiamo aggirare gli hack utilizzati da questi sviluppatori per presentare agli utenti la migliore esperienza.

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

Ha funzionato per me.

1
meJustAndrew

Uso il rilevamento del browser durante la registrazione degli errori JavaScript poiché è utile sapere in quale browser si è verificato l'errore. 

Originariamente da questa domanda Ho usato una voce nella cartella 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>

Ma questo era incoerente e qualche volta veniva ancora segnalato Chrome, quindi ora uso ulteriormente questa classe 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