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 Incsię 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.vendorjest: "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.chrometeraz sprawdza, czy nie ma wartości zero. Ale zwróć szczególną uwagę na IE11, dodałem sprawdzanie, undefinedponieważ 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 undefinedponownie. 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.chromewypisuje 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 truedla window.chrome.. mimo że IE11 wyświetla dane wyjściowe undefineddla 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 CriOSpowodu wyświetlania truew 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.oprnie jest undefinedod teraz Chrome 66 ma OPRw 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.oprnie jest undefined.
jeszcze krótszy: var is_chrome = /chrome/i.test( navigator.userAgent );
truew 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).
truedo window.chrome. Sprawdź conditionizr.com, który ma kuloodporną detekcję + naprawę.
!!konwertuje wartość na jedną truelub false. typeof(window.chrome)daje "object", a typeof(!!window.chrome)daje "boolean". Przykładowy kod również działa, ponieważ ifinstrukcja dokonuje konwersji.
truedla 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() );
truew 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ć webkitprefiksowaną właściwość w styleobiekcie bodyelementu
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. OPRistnieje tylko w Operze.Edgeistnieje 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.webstorejest terazundefined