Ho bisogno di alcune funzioni che restituiscono un valore booleano per verificare se il browser lo è Chrome .
Come posso creare tale funzionalità?
Ho bisogno di alcune funzioni che restituiscono un valore booleano per verificare se il browser lo è Chrome .
Come posso creare tale funzionalità?
Risposte:
Aggiornamento: consultare la risposta di Jonathan per un modo aggiornato di gestirlo. La risposta che segue potrebbe ancora funzionare, ma potrebbe innescare alcuni falsi positivi in altri browser.
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
Tuttavia, come indicato, gli agenti utente possono essere falsificati, quindi è sempre meglio utilizzare il rilevamento delle funzionalità (ad es. Modernizer ) quando si gestiscono questi problemi, come menzionano altre risposte.
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Inc
a navigator.vendor
, quindi questo metodo non è a prova di proiettile, qualcosa del genere /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)
probabilmente funzionerebbe meglio
Per verificare se il browser è Google Chrome , prova questo:
// 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
}
Esempio di utilizzo: http://codepen.io/jonathan/pen/WpQELR
Il motivo per cui funziona è perché se usi la finestra di ispezione di Google Chrome e vai alla scheda della console. Digita "finestra" e premi invio. Quindi sarai in grado di visualizzare le proprietà DOM per l '"oggetto finestra". Quando si comprime l'oggetto è possibile visualizzare tutte le proprietà, inclusa la proprietà 'chrome'.
Non è più possibile utilizzare rigorosamente uguale a true per verificare in IE window.chrome
. IE era solito tornare undefined
, ora ritorna true
. Ma indovina un po ', IE11 ora torna di nuovo indefinito. IE11 restituisce anche una stringa vuota ""
per window.navigator.vendor
.
Spero che aiuti!
AGGIORNARE:
Grazie a Halcyon991 per aver sottolineato di seguito, che anche la nuova Opera 18+ viene trasmessa su true window.chrome
. Sembra che Opera 18 sia basato su Chromium 31 . Quindi ho aggiunto un segno di spunta per assicurarmi che window.navigator.vendor
is: "Google Inc"
and not is "Opera Software ASA"
. Anche grazie a Ring e Adrien Be per il testa a testa su Chrome 33 che non torna più vero ... window.chrome
ora controlla se non nullo. Ma fai molta attenzione a IE11, ho aggiunto il check back undefined
poiché IE11 ora viene emesso undefined
, come ha fatto quando è stato rilasciato per la prima volta .. poi dopo alcuni build di aggiornamento è stato emesso su true
... ora la build di aggiornamento recente viene undefined
nuovamente lanciata . Microsoft non riesce a decidersi!
AGGIORNAMENTO 24/07/2015 - aggiunta per Opera check
Opera 30 è stata appena rilasciata. Non viene più emesso window.opera
. E anche window.chrome
output su true nel nuovo Opera 30. Quindi è necessario verificare se OPR è in userAgent . Ho aggiornato le mie condizioni sopra per tenere conto di questa nuova modifica in Opera 30, poiché utilizza lo stesso motore di rendering di Google Chrome.
AGGIORNAMENTO 13/10/2015 - aggiunta per controllo IE
Aggiunto controllo per IE Edge grazie alla sua uscita true
per window.chrome
.. anche se le uscite IE11 undefined
per window.chrome
. Grazie ad artfulhacker per averci fatto sapere questo!
AGGIORNAMENTO 2/5/2016 - aggiunta per iOS Chrome check
Aggiunto controllo per iOS Chrome check CriOS
grazie alla sua uscita true
per Chrome su iOS. Grazie a xinthose per averci informato di questo!
AGGIORNAMENTO 18/04/2018 - modifica per il controllo Opera
A cura di controllo per Opera, il controllo window.opr
non è undefined
dato che ora Chrome 66 ha OPR
in window.navigator.vendor
. Grazie a Frosty Z e Daniel Wallman per aver segnalato questo!
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
, pertanto isChrome()
restituisce false .
window.opr
non lo sono undefined
.
ancora più breve: var is_chrome = /chrome/i.test( navigator.userAgent );
true
in Microsoft Edge.
Una soluzione molto più semplice è solo per usare:
var isChrome = !!window.chrome;
Il !!
just converte l'oggetto in un valore booleano. Nei browser non Chrome, questa proprietà sarà undefined
, il che non è vero.
Nota che questo vale anche per le versioni di Edge basate su Chrome (grazie a @Carrm per averlo segnalato).
true
a window.chrome
. Scopri conditionizr.com che ha un rilevamento + correzione a prova di proiettile.
!!
converte il valore in uno true
o false
. typeof(window.chrome)
dà "object"
, mentre typeof(!!window.chrome)
dà "boolean"
. L'esempio di codice funziona anche perché l' if
istruzione esegue la conversione.
true
per 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
in Microsoft Edge.
Puoi anche desiderare la versione specifica di Chrome:
var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
var uaArray = ua.split(' ')
, version = uaArray[uaArray.length - 2].substr(7);
}
Mi scuso con The Big Lebowski per aver usato la sua risposta nella mia.
"537.36"
in Microsoft Edge.
Puoi usare:
navigator.userAgent.indexOf("Chrome") != -1
Funziona su v.71
navigator.userAgent.includes("Chrome")
Funziona per me su Chrome su Mac. Sembra essere o più semplice o più affidabile (nel caso in cui la stringa UserAgent sia stata testata) di tutto quanto sopra.
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
L'utente potrebbe cambiare l'agente utente. Prova a testare la webkit
proprietà con prefisso style
nell'oggetto body
dell'elemento
if ("webkitAppearance" in document.body.style) {
// do stuff
}
Controlla questo: Come rilevare i browser Safari, Chrome, IE, Firefox e Opera?
Nel tuo caso: var isChrome = !! window.chrome && (!! window.chrome.webstore || !! window.chrome.runtime);
Conoscere i nomi di diversi browser desktop (Firefox, IE, Opera, Edge, Chrome). Tranne 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;
}
Funziona nelle seguenti versioni del browser:
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)
Guarda l'essenza qui e il violino qui
Lo snippet di codice originale non funzionava più per Chrome e ho dimenticato dove l'ho trovato. Prima aveva un safari ma non ho più accesso al safari, quindi non posso più verificarlo.
Solo i codici Firefox e IE facevano parte dello snippet originale.
Il controllo per Opera, Edge e Chrome è diretto. Hanno differenze in userAgent. OPR
esiste solo in Opera.Edge
esiste solo in Edge. Quindi per verificare la presenza di Chrome questa stringa non dovrebbe essere lì.
Per quanto riguarda Firefox e IE, non posso spiegare cosa fanno.
Aggiungerò questa funzionalità a un pacchetto che sto scrivendo
tutte le risposte sono sbagliate. "Opera" e "Chrome" sono uguali in tutti i casi.
(parte modificata)
ecco la risposta giusta
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstore
è oraundefined