2010-06-15 2 views

risposta

27

A questo punto, troppi browser fanno finta di essere Chrome per cavalcare la sua popolarità così come combattere l'abuso di rilevamento del browser per una partita semplice per "Chrome" per essere più efficace. Vorrei raccomandare il rilevamento delle funzioni in futuro, ma Chrome (e WebKit/Blink in generale) è noto per aver mentito anche ai meccanismi di rilevamento delle funzioni, quindi anche questo non è così eccezionale come è addirittura destinato a diventare più difficile.

Posso solo consigliare di rimanere in primo piano confrontando le stringhe UA conosciute con quelle di altri browser tramite siti di terze parti e creando modelli da lì. Il modo in cui lo fai dipende interamente dalle stringhe stesse. Tieni a mente che a causa della natura dei browser e delle stringhe UA, non può mai esserci un'espressione regolare "affidabile" per abbinarli.

In PHP, il server pertinente var è $_SERVER['HTTP_USER_AGENT'].

+1

bella. L'utilizzo di ** preg_match ** per il rilevamento di Chrome sarebbe sicuramente un sovraccarico. –

+0

Perché è necessario il '! == false'? non sarebbe più facile solo se (strpos ($ _ SERVER ['HTTP_USER_AGENT'], 'Chrome')) '? –

+7

@Tuga: se la stringa inizia con ''Chrome'',' strpos() 'restituisce 0. Poiché' 0 == false', il codice if non verrà eseguito, ma lo si desidera. La funzione restituisce un vero 'falso' se la stringa non viene trovata, quindi devi confrontarla per tipo usando'! == false'. Questo è anche il motivo per cui la tua risposta è sbagliata. – BoltClock

16

la pena ricordare che, se anche voi volete includere Chrome per iOS, è necessario partita contro la "crios" così:

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false 
|| strpos($_SERVER['HTTP_USER_AGENT'], 'CriOS') !== false) { 
    // User agent is Google Chrome 
} 
5

Sulla @Adams risposta, il rilevamento più accurato Google Chrome di escludere alcuni browser con "Chrome" nella stringa user agent usando useragentstring.com e udger.com:

if(preg_match('/(Chrome|CriOS)\//i',$_SERVER['HTTP_USER_AGENT']) 
&& !preg_match('/(Aviator|ChromePlus|coc_|Dragon|Edge|Flock|Iron|Kinza|Maxthon|MxNitro|Nichrome|OPR|Perk|Rockmelt|Seznam|Sleipnir|Spark|UBrowser|Vivaldi|WebExplorer|YaBrowser)/i',$_SERVER['HTTP_USER_AGENT'])){ 
    // Browser might be Google Chrome 
}