JavaScript: Kullanıcı tarayıcısının Chrome olup olmadığını nasıl öğrenebilirim?


220

Tarayıcı Chrome olup olmadığını kontrol etmek için bir boole değeri döndüren bazı işlevlere ihtiyacım var .

Bu işlevselliği nasıl oluştururum?


16
Bunun yerine özellik algılama yapmak istemediğinizden emin misiniz ("bu Chrome mu?" Sormak yerine "bu" ihtiyacım olabilir mi? "
Sorusunu sorun

42
kim bilir? kullanıcının bir krom uzantısı indirmesini isteyebilir
naveen

2
Bu soru, kullanıcı aracısı algılama sorununu göstermektedir. Sadece üç yıl sonra, Eğlence 3D Kutusu Arka Planı, Chrome'a ​​düşük kaliteli cep telefonumu yükleyecek (yüklemeye çalışacak), ancak üst düzey masaüstü bilgisayarımda Firefox'ta bile denemeyecek.
Álvaro González

5
Özellik algılama işleminin bir yol olduğunu kabul ediyorum. ancak tespit etmek istediğiniz meşru alanlar vardır. örneğin ben sadece krom için xhr.sendAsBinary yama istiyorum. benim ilk çözüm filereader.readasbinary uygulanmış olup olmadığını kontrol etti. Ancak, bazı mobil tarayıcılar için yamalar nerede sorunları yaşıyorum ve bu nedenle yükleme başarısız. Bu düzeltmeyi yalnızca krom için istiyorum.
ayaz muhteşem

4
Bir tarayıcının Chrome olup olmadığını bilmenin neden önemli olabileceğini bilmek ister misiniz? Chrome'un RSS yayınlarını yükleyememesine ne dersiniz? Böylece, Chrome'a ​​yüklenemeyen bir RSS akışına bağlamak yerine, gerçekten bir uyarı verebilir veya kullanıcıyı yönlendirebilirsiniz?
Saygılarımızla

Yanıtlar:


205

Güncelleme: Bunu ele almanın güncel bir yolu için lütfen Jonathan'ın cevabına bakın . Aşağıdaki cevap hala işe yarayabilir, ancak diğer tarayıcılarda bazı yanlış pozitifleri tetikleyebilir.

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

Ancak, belirtildiği gibi Kullanıcı Aracıları kimlik sahtekarlığı yapabilir, bu nedenle, diğer yanıtların belirttiği gibi, bu sorunları ele alırken özellik algılama (örneğin Modernizer ) kullanmak her zaman en iyisidir .


.toLowerCase kullanmanın ardındaki neden nedir - neden sadece navigator.userAgent.indexOf ('Chrome') değil, birçok insanın onu kullandığını görüyorum ama noktadan emin değilim?
Jon

7
@Serg, çünkü Chrome'ları yok. Sadece iOS Safari'nin etrafında bir kaplama.
Poetro

2
Teşekkürler, ancak var adınız
camelCase

5
Tarayıcıda bir sürü bu doğruydu döndürür beri burada vb Edge'i, Maxthon, iOS safari ... dışlanan kullandığım kod var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Alex C.

2
Opera (en azından sürüm 42) döner Google Inciçin navigator.vendorbu yöntem kurşun geçirmez değildir, bu yüzden, böyle bir şey /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)muhtemelen daha iyi çalışacak
yorch

314

Tarayıcının Google Chrome olup olmadığını kontrol etmek için şunu deneyin:

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

Kullanım örneği: http://codepen.io/jonathan/pen/WpQELR

Bunun nedeni, Google Chrome denetçisini kullanıyorsanız ve konsol sekmesine giderseniz. 'Window' yazın ve enter tuşuna basın. Sonra 'pencere nesnesi' için DOM özelliklerini görüntüleyebilirsiniz. Nesneyi daralttığınızda, 'chrome' özelliği de dahil olmak üzere tüm özellikleri görüntüleyebilirsiniz.

IE için kontrol etmek için artık kesinlikle eşit eşit kullanamazsınız window.chrome. IE geri dönüyordu undefined, şimdi geri dönüyor true. Ama tahmin edin ne, IE11 şimdi tekrar tanımsız döner. IE11 de boş bir dize döndürür ""için window.navigator.vendor.

Umarım bu yardımcı olur!

GÜNCELLEME:

Halcyon991'e aşağıda belirttiği için teşekkür ederiz , yeni Opera 18+ 'nın da doğru şekilde çıktısı window.chrome. Gibi görünüyor Opera 18 dayanmaktadır Krom 31 . Ben olduğundan emin olmak için bir kontrol ekledi window.navigator.vendor: "Google Inc"ve değil "Opera Software ASA". Ayrıca Ring ve Adrien Be sayesinde Chrome 33'ün artık doğru bir şekilde geri dönmemesi için ... window.chromeşimdi boş olup olmadığını kontrol ediyor. Ancak IE11'e yakından dikkat edin, undefinedIE11'in şimdi undefinedilk çıkışında olduğu gibi çıktılarından sonra geri ekledim .. sonra bazı güncelleme yapılarından sonra çıktı true... şimdi son güncelleme derlemesi undefinedtekrar çıktı. Microsoft bu sorunu çözemez!

GÜNCELLEME 7/24/2015 - Opera kontrolü için ekleme

Opera 30 piyasaya çıktı. Artık çıktı vermiyor window.opera. Ve ayrıca window.chromeolmadığını kontrol gereken yeni Opera 30. So true çıkışı OPR içindedir userAgent'taki . Google Chrome ile aynı render motoru kullandığından, Opera 30'daki bu yeni değişikliği hesaba katmak için yukarıdaki durumumu güncelledim.

GÜNCELLEME 10/13/2015 - IE kontrolü için ekleme

Nedeniyle bu çıkışı IE Edge onay eklendi trueiçin window.chromeolsa IE11 çıkışlar .. undefinediçin window.chrome. Bunu bize bildirdiği için artfulhacker'a teşekkürler !

UPDATE 2/5/2016 - iOS Chrome kontrolü için ek

İOS'ta Chrome CriOSiçin çıktı alması nedeniyle iOS Chrome kontrolü için kontrol eklendi true. Bu konuda bize bilgi verdiğiniz için xinthose'a teşekkürler !

GÜNCELLEME 4/18/2018 - Opera kontrolü için değişiklik

Opera için çek Düzenlendi, kontrol window.oprdeğil undefinedartık Chrome 66 beri OPRiçinde window.navigator.vendor. Frosty Z ve Daniel Wallman'a bunu bildirdikleri için teşekkürler !


Bu IE10 için çalışmaz. IE10'daki typeof window.chrome {object} döndürür
magritte

2
var isGoogleChrome = window.chrome! = null && window.navigator.vendor === "Google Inc.";
Halka

1
@Xinthose teşekkürler .. Ben sadece IOS Chrome için bir çek ekledim .. çok takdir! :)
Jonathan Marzullo

2
Belki Daniel Wallman ile aynı sorun: Android Chrome kullanıcı aracım "OPR" dizesini içeriyor! 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, bu nedenle yanlışisChrome() döndürür .
Frosty Z

2
@FrostyZ ve @DanielWallman'a bize bildirdiğiniz için teşekkür ederiz. İçin Opera kontrolleri yüzden sabit window.oprdeğildir undefined.
Jonathan Marzullo

21

daha da kısa: var is_chrome = /chrome/i.test( navigator.userAgent );


27
trueMicrosoft Edge uygulamasına dönün .
Cobby

16

Çok daha basit bir çözüm sadece kullanmaktır:

var isChrome = !!window.chrome;

!!Sadece bir boolean değerine nesneyi dönüştürür. Chrome olmayan tarayıcılarda, bu özellik undefineddoğrudur.

Bunun Chrome tabanlı Edge sürümleri için de geçerli olduğunu unutmayın (bunu belirttiğiniz için @Carrm'e teşekkürler).


5
Opera aslında döner trueiçin window.chrome. Kurşun geçirmez bir algılama + düzeltme özelliğine sahip conditionizr.com sitesine göz atın.
Halcyon991

7
Opera aslında Chrome olsa da
Karel Bílek

Neden iki kere anlamıyorum !! , u doğrudan kullanabilirsiniz, eğer (krom) {}
Vishal Sharma

3
@vishalsharma, !!değeri ya trueya olarak dönüştürür false. typeof(window.chrome)verir "object", oysa typeof(!!window.chrome)verir "boolean". Kod örneğiniz de ififade dönüşüm yaptığı için çalışır .
Drew Noakes

1
Bu trueEdge için de geri döner .
Carrm

14

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, '  '));


Maalesef navigator.vendor === "Google Inc." Opera'da (en az v.49) bu nedenle Opera kodunuzu kullandığınızda Chrome olarak görünür.
Wojtek Majerski

9
Dünyanın bir yerinde bir yavru kedi aslında ihtiyacımız olmayan her normal ifade için ölür.
Sz.

Hiçbir açıklama yok, yanlış pozitif / negatifler hakkında hiçbir belirti yok, sadece bir parça kod buraya dökülüyor ... Bu yanıt gerçekten reddedilmelidir. Sorulan soruya bir cevap bile yok.
Alexandre Germain

8
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );

3
Bu hoşuma gitti, unutmayın var da is_chrome = /chrome/i.test(navigator.userAgent); Çok
AlanFoster

14
trueMicrosoft Edge'de döndürür .
Cobby

@Cobby: Saygılarımızla, Edge o zaman serbest bırakılmadı. Bilgi için teşekkürler :)
naveen

3

Chrome'un belirli bir sürümünü de isteyebilirsiniz:

var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
    var uaArray = ua.split(' ')
    ,   version = uaArray[uaArray.length - 2].substr(7);
}

Cevabını benim için kullandığından dolayı Büyük Lebowski'den özür dilerim.


4
Sürüm "537.36"Microsoft Edge'de.
Cobby

3

Kullanabilirsiniz:

navigator.userAgent.indexOf("Chrome") != -1

V.71 üzerinde çalışıyor


navigator.userAgent.includes("Chrome")
Alex Szücs

2

Mac'te Chrome'da benim için çalışıyor. Yukarıdakilerden daha basit veya daha basit veya daha güvenilir (userAgent dizesi test edildiğinde) gibi görünüyor.

        var isChrome = false;
        if (window.chrome && !window.opr){
            isChrome = true;
        }
        console.log(isChrome);

2
const isChrome = window.chrome && !window.opr;
ifeelbadformyoldquestions

1

Kullanıcı, kullanıcı aracısını değiştirebilir. Öğenin nesnesindeki webkitön ekli özelliği test etmeyi deneyinstylebody

if ("webkitAppearance" in document.body.style) {
  // do stuff
}

1
Firefox'ta: (document.body.style içindeki "webkitAnimation" === true
Tomas Prado

3
Bilginize: 'webkitAppearance' da artık çalışmıyor. Edge şimdi kullanıyor. Muhtemelen cevabınızı silmek en iyisidir. ^^
hexalys


0

Farklı masaüstü tarayıcılarının (Firefox, IE, Opera, Edge, Chrome) adlarını bilmek. Safari hariç.

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

Aşağıdaki tarayıcı sürümlerinde çalışır:

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)

Buradaki özü ve kemanı burada görün

Orijinal kod snippet'i artık Chrome için çalışmadı ve nerede bulduğumu unuttum. Daha önce safari vardı ama artık doğrulama yapamam bu yüzden safari erişimim yok.

Yalnızca Firefox ve IE kodları orijinal snippet'in bir parçasıydı.

Opera, Edge ve Chrome kontrolü basittir. UserAgent'ta farklılıkları var. OPRsadece Opera'da bulunur. Edgeyalnızca Edge'de bulunur. Chrome'u kontrol etmek için bu dize olmamalıdır.

Firefox ve IE'ye gelince, ne yaptıklarını açıklayamam.

Bu işlevi yazdığım bir pakete ekleyeceğim


-4

tüm cevaplar yanlış. "Opera" ve "Chrome" her durumda aynıdır.

(düzenlenmiş bölüm)

işte doğru cevap

if (window.chrome && window.chrome.webstore) {
    // this is Chrome
}

1
Bir cevaptan daha iyi yorum.
Jace Cotton

Neden modifiye edildiğinizi merak ediyorsanız, bu doğru değildir. Bir örnek olarak, klavye kısayollarını ve erişim tuşu değiştiricilerini farklı şekilde ele alırlar (ve bunlar özellik algılanamaz).
Zilk

Ben 'opera' ve 'chrome' aynı tarayıcı sadece simge farklı olduğunu söylemiyorum. Yukarıda açıklanan yöntemlerin her iki tarayıcı için de aynı sonucu verdiğini söylüyorum.
Ararat Harutyunyan

@Zilk Örneğin 66 oy veren ilk yanıtı test ettiniz mi?
Ararat Harutyunyan

9
Bu, krom 71'den itibaren artık çalışmayacak. window.chrome.webstoreŞimdiundefined
Esteban
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.