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 Inc
için navigator.vendor
bu 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, undefined
IE11'in şimdi undefined
ilk çı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 undefined
tekrar çı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.chrome
olmadığı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 true
için window.chrome
olsa IE11 çıkışlar .. undefined
iç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 CriOS
iç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.opr
değil undefined
artık Chrome 66 beri OPR
iç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.opr
değildir undefined
.
daha da kısa: var is_chrome = /chrome/i.test( navigator.userAgent );
true
Microsoft 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 undefined
doğ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).
true
iç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 true
ya olarak dönüştürür false
. typeof(window.chrome)
verir "object"
, oysa typeof(!!window.chrome)
verir "boolean"
. Kod örneğiniz de if
ifade dönüşüm yaptığı için çalışır .
true
Edge 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() );
true
Microsoft 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 deneyinstyle
body
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. OPR
sadece Opera'da bulunur. Edge
yalnı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