JavaScript: jak sprawdzić, czy przeglądarką użytkownika jest Chrome?

Potrzebuję funkcji zwracającej wartość logiczną, aby sprawdzić, czy przeglądarka to Chrome.

Jak stworzyć taką funkcjonalność?

Author: Peter Mortensen, 2010-12-30

9 answers

Aktualizacja: Zobacz odpowiedź Jonathana Aby uzyskać zaktualizowany sposób radzenia sobie z tym. Odpowiedź poniżej może nadal działać, ale prawdopodobnie może wywołać fałszywe alarmy w innych przeglądarkach.

var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);

Jednak, jak wspomniano agenci użytkownika mogą być sfałszowani, więc zawsze najlepiej jest Użyć wykrywania funkcji (np. Modernizer) podczas obsługi tych problemów, jak wspominają inne odpowiedzi.

 155
Author: Rion Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:44

Aby sprawdzić, czy przeglądarka to Google Chrome, spróbuj tego:

// please note, 
// that IE11 now returns undefined again for window.chrome
// and new Opera 30 outputs true for window.chrome
// but needs to check if window.opr is not undefined
// and new IE Edge outputs to true now for window.chrome
// and if not iOS Chrome check
// so use the below updated condition
var isChromium = window.chrome;
var winNav = window.navigator;
var vendorName = winNav.vendor;
var isOpera = typeof window.opr !== "undefined";
var isIEedge = winNav.userAgent.indexOf("Edge") > -1;
var isIOSChrome = winNav.userAgent.match("CriOS");

if (isIOSChrome) {
   // is Google Chrome on IOS
} else if(
  isChromium !== null &&
  typeof isChromium !== "undefined" &&
  vendorName === "Google Inc." &&
  isOpera === false &&
  isIEedge === false
) {
   // is Google Chrome
} else { 
   // not Google Chrome 
}

Przykład użycia: http://codepen.io/jonathan/pen/WpQELR

To działa, ponieważ jeśli używasz Inspektora Google Chrome i przejdź do zakładki konsola. Wpisz "okno" i naciśnij enter. Następnie możesz wyświetlić właściwości DOM dla 'obiektu window'. Po zwinięciu obiektu można wyświetlić wszystkie właściwości, w tym właściwość "chrome".

Nie możesz używać ściśle równa się true aby sprawdzić w IE dla window.chrome. IE kiedyś zwracało undefined, TERAZ Zwraca true. ale zgadnij co, IE11 znowu zwraca undefined. IE11 zwraca również pusty łańcuch "" dla window.navigator.vendor.

Mam nadzieję, że to pomoże!

UPDATE:

Dziękuję Halcyon991 za zwrócenie uwagi poniżej, że nowa Opera 18+ również wychodzi na true dla window.chrome. Wygląda na to, że Opera 18 jest oparta na Chromium 31 . Więc dodałem czek, aby oczywiście window.navigator.vendor jest: "Google Inc" i nie jest "Opera Software ASA". Również podziękowania dla Ring i Adrien Be dla heads up o Chrome 33 już nie zwraca true... window.chrome teraz sprawdza, czy nie null. Ale Odtwórz uważnie IE11, dodałem check back dla undefined ponieważ IE11 teraz wyjścia undefined, Jak to było, gdy po raz pierwszy wydany.. następnie po jakimś update builds został wysłany do true.. teraz ostatni update build wyświetla undefined ponownie. Microsoft nie może się zdecydować!

Aktualizacja 24.07.2015-dodanie do sprawdzenia Opera

Opera 30 została właśnie wydana. Nie ma już wyjścia window.opera. A także window.chrome wyjścia do true w Nowej Operze 30. Musisz więc sprawdzić, czy OPR znajduje się w userAgent . Zaktualizowałem Mój stan powyżej, aby uwzględnić tę nową zmianę w Operze 30, ponieważ używa tego samego silnika renderowania co Google Chrome.

Aktualizacja 10/13/2015-dodanie do sprawdzania IE

Dodano sprawdzanie krawędzi IE ze względu na wyjście true dla window.chrome.. mimo że IE11 wyjścia undefined dla window.chrome. Podziękowania dla artfulhacker za poinformowanie nas o tym!

Aktualizacja 2/5/2016-dodatek do iOS Chrome check

Dodano check for iOS Chrome check CriOS ze względu na to, że wyświetla true dla Chrome na iOS. Podziękowania dla xinthose za poinformowanie nas o tym!

Aktualizacja 4/18/2018-zmiana dla sprawdzenia Opery

Edited check for Opera, checking window.opr is not undefined since now Chrome 66 ma OPR W window.navigator.vendor. Podziękowania dla Frosty Z i Daniela Wallmana za reportaż!

 248
Author: Jonathan Marzullo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-23 11:43:06

Jeszcze krótszy: var is_chrome = /chrome/i.test( navigator.userAgent );

 22
Author: The Big Lebowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-09 13:57:06

console.log(JSON.stringify({
  isAndroid: /Android/.test(navigator.userAgent),
  isCordova: !!window.cordova,
  isEdge: /Edge/.test(navigator.userAgent),
  isFirefox: /Firefox/.test(navigator.userAgent),
  isChrome: /Google Inc/.test(navigator.vendor),
  isChromeIOS: /CriOS/.test(navigator.userAgent),
  isChromiumBased: !!window.chrome && !/Edge/.test(navigator.userAgent),
  isIE: /Trident/.test(navigator.userAgent),
  isIOS: /(iPhone|iPad|iPod)/.test(navigator.platform),
  isOpera: /OPR/.test(navigator.userAgent),
  isSafari: /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent),
  isTouchScreen: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,
  isWebComponentsSupported: 'registerElement' in document && 'import' in document.createElement('link') && 'content' in document.createElement('template')
}, null, '  '));
 13
Author: Josef Ježek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-06 12:24:41

Dużo prostszym rozwiązaniem jest po prostu użycie:

var isChrome = !!window.chrome;

!! po prostu zamienia obiekt na wartość logiczną. W przeglądarkach innych niż Chrome właściwość ta będzie undefined, co nie jest prawdą.

 12
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-05 10:47:41
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
 8
Author: naveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-02 17:30:32

Możesz również chcieć konkretnej wersji Chrome:

var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
    var uaArray = ua.split(' ')
    ,   version = uaArray[uaArray.length - 2].substr(7);
}
Przepraszam Big Lebowskiego za użycie jego odpowiedzi w mojej.
 2
Author: MrOodles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-07 19:00:58

Użytkownik może zmienić agenta użytkownika . Spróbuj przetestować właściwość webkit prefiksowaną w style obiekcie body elementu

if ("webkitAppearance" in document.body.style) {
  // do stuff
}
 1
Author: guest271314,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-27 15:06:22

Wszystkie odpowiedzi są błędne. "Opera" i "Chrome" są takie same we wszystkich przypadkach.

(część edytowana)

Oto właściwa odpowiedź

if (window.chrome && window.chrome.webstore) {
    // this is Chrome
}
 -4
Author: Ararat Harutyunyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 13:03:45