J'ai besoin d'une fonction renvoyant une valeur booléenne pour vérifier si le navigateur est Chrome .
Comment créer une telle fonctionnalité?
J'ai besoin d'une fonction renvoyant une valeur booléenne pour vérifier si le navigateur est Chrome .
Comment créer une telle fonctionnalité?
Réponses:
Mise à jour: veuillez consulter la réponse de Jonathan pour une façon actualisée de gérer cela. La réponse ci-dessous peut toujours fonctionner, mais elle pourrait probablement déclencher des faux positifs dans d'autres navigateurs.
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
Cependant, comme mentionné, les agents utilisateurs peuvent être usurpés, il est donc toujours préférable d'utiliser la détection des fonctionnalités (par exemple Modernizer ) lors du traitement de ces problèmes, comme d'autres réponses le mentionnent.
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Inc
à navigator.vendor
, cette méthode n'est pas l' épreuve des balles, quelque chose comme /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)
marcherait probablement mieux
Pour vérifier si le navigateur est Google Chrome , essayez ceci:
// 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
}
Exemple d'utilisation: http://codepen.io/jonathan/pen/WpQELR
La raison pour laquelle cela fonctionne est que si vous utilisez l'inspecteur Google Chrome et accédez à l'onglet console. Tapez «fenêtre» et appuyez sur entrée. Ensuite, vous pourrez afficher les propriétés DOM de «l'objet fenêtre». Lorsque vous réduisez l'objet, vous pouvez afficher toutes les propriétés, y compris la propriété «chrome».
Vous ne pouvez plus utiliser strictement égal à vrai pour vérifier dans IE window.chrome
. IE retournait undefined
, maintenant il revient true
. Mais devinez quoi, IE11 renvoie à nouveau indéfini. IE11 renvoie également une chaîne vide ""
pour window.navigator.vendor
.
J'espère que ça aide!
METTRE À JOUR:
Merci à Halcyon991 d' avoir souligné ci-dessous que le nouvel Opera 18+ est également vrai window.chrome
. On dirait qu'Opera 18 est basé sur Chromium 31 . J'ai donc ajouté une vérification pour m'assurer que le window.navigator.vendor
est: "Google Inc"
et non "Opera Software ASA"
. Merci aussi à Ring et Adrien Be pour les avertissements sur Chrome 33 ne retournant plus vrai ... window.chrome
vérifie maintenant si non nul. Mais faites très attention à IE11, j'ai ajouté la vérification undefined
depuis qu'IE11 sort maintenant undefined
, comme il l'a fait lors de sa première sortie .. puis après quelques builds de mise à jour, il est sorti vers true
... la build de mise à jour récente est de undefined
nouveau en sortie . Microsoft ne peut pas se décider!
MISE À JOUR 7/24/2015 - ajout pour la vérification d'Opera
Opera 30 vient de sortir. Il ne sort plus window.opera
. Et window.chrome
affiche également true dans le nouvel Opera 30. Vous devez donc vérifier si OPR est dans userAgent . J'ai mis à jour ma condition ci-dessus pour tenir compte de ce nouveau changement dans Opera 30, car il utilise le même moteur de rendu que Google Chrome.
MISE À JOUR 13/10/2015 - ajout pour la vérification IE
Ajout de la vérification pour IE Edge en raison de sa sortie true
pour window.chrome
.. même si IE11 sort undefined
pour window.chrome
. Merci à artfulhacker de nous en avoir informé!
MISE À JOUR 2/5/2016 - ajout pour la vérification iOS Chrome
Ajout d'une vérification pour iOS Chrome en CriOS
raison de sa sortie true
pour Chrome sur iOS. Merci à xinthose de nous en avoir informé!
MISE À JOUR 4/18/2018 - changement pour chèque Opera
Sous la direction chèque de l' Opéra, la vérification window.opr
n'est pas undefined
depuis maintenant Chrome 66 a OPR
en window.navigator.vendor
. Merci à Frosty Z et Daniel Wallman pour avoir signalé cela!
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
, isChrome()
renvoie donc false .
window.opr
pas undefined
.
encore plus court: var is_chrome = /chrome/i.test( navigator.userAgent );
true
dans Microsoft Edge.
Une solution beaucoup plus simple consiste simplement à utiliser:
var isChrome = !!window.chrome;
Le !!
convertit simplement l'objet en une valeur booléenne. Dans les navigateurs non Chrome, cette propriété sera undefined
, ce qui n'est pas vrai.
Notez que cela retourne également vrai pour les versions d'Edge basées sur Chrome (merci @Carrm de l'avoir signalé).
true
en fait window.chrome
. Découvrez conditionizr.com qui a une détection et une correction pare-balles.
!!
convertit la valeur en soit true
ou false
. typeof(window.chrome)
donne "object"
, tandis que typeof(!!window.chrome)
donne "boolean"
. Votre exemple de code fonctionne également, car l' if
instruction effectue la conversion.
true
pour 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
dans Microsoft Edge.
Vous pouvez également souhaiter la version spécifique de Chrome:
var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
var uaArray = ua.split(' ')
, version = uaArray[uaArray.length - 2].substr(7);
}
Toutes mes excuses à The Big Lebowski pour avoir utilisé sa réponse dans la mienne.
"537.36"
dans Microsoft Edge.
Vous pouvez utiliser:
navigator.userAgent.indexOf("Chrome") != -1
Il travaille sur v.71
navigator.userAgent.includes("Chrome")
Fonctionne pour moi sur Chrome sur Mac. Semble être plus simple ou plus fiable (dans le cas où la chaîne userAgent a été testée) que tout ce qui précède.
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
L'utilisateur peut changer d'agent utilisateur. Essayez de tester la webkit
propriété préfixée dans l' style
objet de l' body
élément
if ("webkitAppearance" in document.body.style) {
// do stuff
}
Vérifiez ceci: Comment détecter les navigateurs Safari, Chrome, IE, Firefox et Opera?
Dans votre cas: var isChrome = !! window.chrome && (!! window.chrome.webstore || !! window.chrome.runtime);
Connaître les noms des différents navigateurs de bureau (Firefox, IE, Opera, Edge, Chrome). Sauf 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;
}
Fonctionne dans les versions de navigateur suivantes:
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)
Voir l'essentiel ici et le violon ici
L'extrait de code d'origine ne fonctionnait plus pour Chrome et j'ai oublié où je l'ai trouvé. Il y avait un safari auparavant mais je n'ai plus accès au safari donc je ne peux plus vérifier.
Seuls les codes Firefox et IE faisaient partie de l'extrait d'origine.
La vérification d'Opera, Edge et Chrome est simple. Ils ont des différences dans userAgent. OPR
n'existe que dans Opera. Edge
n'existe que dans Edge. Donc, pour vérifier Chrome, cette chaîne ne devrait pas être là.
Quant à Firefox et IE, je ne peux pas expliquer ce qu'ils font.
Je vais ajouter cette fonctionnalité à un package que j'écris
toutes les réponses sont fausses. "Opera" et "Chrome" sont les mêmes dans tous les cas.
(partie éditée)
voici la bonne réponse
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstore
est maintenantundefined