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?
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?
Yanıtlar:
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 .
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
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
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 !
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 .
window.oprdeğildir undefined.
daha da kısa: var is_chrome = /chrome/i.test( navigator.userAgent );
trueMicrosoft Edge uygulamasına dönün .
Ç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).
trueiçin window.chrome. Kurşun geçirmez bir algılama + düzeltme özelliğine sahip conditionizr.com sitesine göz atın.
!!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 .
trueEdge için de geri döner .
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() );
trueMicrosoft Edge'de döndürür .
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.
"537.36"Microsoft Edge'de.
Kullanabilirsiniz:
navigator.userAgent.indexOf("Chrome") != -1
V.71 üzerinde çalışıyor
navigator.userAgent.includes("Chrome")
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);
const isChrome = window.chrome && !window.opr;
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
}
Bunu kontrol edin: Safari, Chrome, IE, Firefox ve Opera tarayıcısını nasıl tespit edebilirim?
Sizin durumunuzda: var isChrome = !! window.chrome && (!! window.chrome.webstore || !! window.chrome.runtime);
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.
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
}
window.chrome.webstoreŞimdiundefined