Potrzebuję funkcji zwracającej wartość logiczną, aby sprawdzić, czy przeglądarka jest Chrome .
Jak utworzyć taką funkcjonalność?
Potrzebuję funkcji zwracającej wartość logiczną, aby sprawdzić, czy przeglądarka jest Chrome .
Jak utworzyć taką funkcjonalność?
Odpowiedzi:
Aktualizacja: zapoznaj się z odpowiedzią Jonathana, aby uzyskać zaktualizowany sposób rozwiązania tego problemu. Poniższa odpowiedź może nadal działać, ale może powodować pewne fałszywe alarmy w innych przeglądarkach.
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
Jednak, jak wspomniano, programy użytkownika mogą być sfałszowane, dlatego zawsze najlepiej jest korzystać z funkcji wykrywania (np. Modernizatora ) podczas rozwiązywania tych problemów, jak wspominają inne odpowiedzi.
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Inc
się navigator.vendor
, więc ta metoda nie jest kuloodporny, coś /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)
będzie prawdopodobnie działać lepiej
Aby sprawdzić, czy przeglądarką jest 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 zastosowania: http://codepen.io/jonathan/pen/WpQELR
Powodem tego jest to, że jeśli używasz inspektora Google Chrome i przejdź do karty konsoli. Wpisz „window” i naciśnij enter. Następnie będziesz mógł zobaczyć właściwości DOM dla „obiektu okna”. Po zwinięciu obiektu można wyświetlić wszystkie właściwości, w tym właściwość „chrome”.
Nie można już używać ściśle równych prawdy do sprawdzania IE window.chrome
. IE kiedyś zwracało undefined
, teraz zwraca true
. Ale zgadnij co, IE11 powraca teraz niezdefiniowane. IE11 zwraca również pusty ciąg znaków ""
dla window.navigator.vendor
.
Mam nadzieję, że to pomoże!
AKTUALIZACJA:
Dziękujemy Halcyon991 za zwrócenie uwagi na to, że nowa Opera 18+ również spełnia swoje oczekiwaniawindow.chrome
. Wygląda na to, że Opera 18 oparta jest na Chromium 31 . Dodałem więc sprawdzenie, aby upewnić się, że window.navigator.vendor
jest: "Google Inc"
a nie jest "Opera Software ASA"
. Również dzięki Ring i Adrien Be za to, że informacje o Chrome 33 już nie wracają ... window.chrome
teraz sprawdza, czy nie ma wartości zero. Ale zwróć szczególną uwagę na IE11, dodałem sprawdzanie, undefined
ponieważ IE11 teraz wyświetla dane wyjściowe undefined
, tak jak to miało miejsce przy pierwszym wydaniu .. a następnie po kilku kompilacjach aktualizacji wypisało to na true
... teraz ostatnia kompilacja aktualizacji wypisuje undefined
ponownie. Microsoft nie może się zdecydować!
AKTUALIZACJA 24.07.2015 - dodatek do czeku Opera
Opera 30 właśnie została wydana. To już nie działa window.opera
. A także window.chrome
wypisuje wartość true w nowej Operze 30. Musisz więc sprawdzić, czy OPR znajduje się w userAgent . Zaktualizowałem powyższy stan, aby uwzględnić tę nową zmianę w Operze 30, ponieważ używa ona tego samego silnika renderowania co Google Chrome.
AKTUALIZACJA 10/13/2015 - dodanie do sprawdzenia IE
Dodano sprawdzanie dla IE Edge, ponieważ wyświetla dane wyjściowe true
dla window.chrome
.. mimo że IE11 wyświetla dane wyjściowe undefined
dla window.chrome
. Dzięki artfulhacker za poinformowanie nas o tym!
AKTUALIZACJA 2/5/2016 - dodatek do czeku na iOS Chrome
Dodano czek dla iOS Chrome czek z CriOS
powodu wyświetlania true
w Chrome na iOS. Dzięki xinthose za poinformowanie nas o tym!
AKTUALIZACJA 18.04.2018 - zmiana na sprawdzenie Opery
Edytowany czek na Operze, sprawdzanie window.opr
nie jest undefined
od teraz Chrome 66 ma OPR
w window.navigator.vendor
. Dziękujemy Frosty Z i Danielowi Wallmanowi za zgłoszenie tego!
Mozilla/5.0 (Linux; Android 8.0.0; ASUS_Z012D Build/OPR1.170623.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36
, dlatego isChrome()
zwraca false .
window.opr
nie jest undefined
.
jeszcze krótszy: var is_chrome = /chrome/i.test( navigator.userAgent );
true
w Microsoft Edge.
Znacznie prostszym rozwiązaniem jest po prostu użycie:
var isChrome = !!window.chrome;
Po !!
prostu przekształca obiekt w wartość logiczną. W przeglądarkach innych niż Chrome ta właściwość będzie undefined
, co nie jest prawdą.
Uwaga: zwraca to również prawdę w przypadku wersji Edge opartych na Chrome (dziękuję @Carrm za zwrócenie na to uwagi).
true
do window.chrome
. Sprawdź conditionizr.com, który ma kuloodporną detekcję + naprawę.
!!
konwertuje wartość na jedną true
lub false
. typeof(window.chrome)
daje "object"
, a typeof(!!window.chrome)
daje "boolean"
. Przykładowy kod również działa, ponieważ if
instrukcja dokonuje konwersji.
true
dla Edge.
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, ' '));
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
true
w Microsoft Edge.
Możesz także 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 Wielkiego Lebowskiego za wykorzystanie jego odpowiedzi w mojej.
"537.36"
w Microsoft Edge.
Możesz użyć:
navigator.userAgent.indexOf("Chrome") != -1
Działa na v.71
navigator.userAgent.includes("Chrome")
Działa dla mnie w Chrome na Macu. Wydaje się być prostszy lub bardziej niezawodny (w przypadku testowania ciągu UserAgent) niż wszystkie powyższe.
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
Użytkownik może zmienić agenta użytkownika. Spróbuj przetestować webkit
prefiksowaną właściwość w style
obiekcie body
elementu
if ("webkitAppearance" in document.body.style) {
// do stuff
}
Sprawdź to: jak wykryć przeglądarkę Safari, Chrome, IE, Firefox i Opera?
W twoim przypadku: var isChrome = !! window.chrome && (!! window.chrome.webstore || !! window.chrome.runtime);
Aby poznać nazwy różnych przeglądarek stacjonarnych (Firefox, IE, Opera, Edge, Chrome). Z wyjątkiem Safari.
function getBrowserName() {
var browserName = '';
var userAgent = navigator.userAgent;
(typeof InstallTrigger !== 'undefined') && (browserName = 'Firefox');
( /* @cc_on!@*/ false || !!document.documentMode) && (browserName = 'IE');
(!!window.chrome && userAgent.match(/OPR/)) && (browserName = 'Opera');
(!!window.chrome && userAgent.match(/Edge/)) && (browserName = 'Edge');
(!!window.chrome && !userAgent.match(/(OPR|Edge)/)) && (browserName = 'Chrome');
/**
* Expected returns
* Firefox, Opera, Edge, Chrome
*/
return browserName;
}
Działa w następujących wersjach przeglądarki:
Opera - 58.0.3135.79
Firefox - 65.0.2 (64-bit)
IE - 11.413.15063 (JS Fiddle no longer supports IE just paste in Console)
Edge - 44.17763.1.0
Chrome - 72.0.3626.121 (Official Build) (64-bit)
Zobacz sedno tutaj i skrzypce tutaj
Oryginalny fragment kodu już nie działał w Chrome i zapomniałem, gdzie go znalazłem. Wcześniej odbyło się safari, ale nie mam już dostępu do safari, więc nie mogę już więcej weryfikować.
Tylko kody Firefox i IE były częścią oryginalnego fragmentu kodu.
Sprawdzanie Opera, Edge i Chrome jest proste. Różnią się one w userAgent. OPR
istnieje tylko w Operze.Edge
istnieje tylko w Edge. Aby sprawdzić Chrome, nie powinno ich być.
Jeśli chodzi o Firefox i IE, nie mogę wyjaśnić, co robią.
Dodam tę funkcjonalność do paczki, którą piszę
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
}
window.chrome.webstore
jest terazundefined