Question

Comme le titre l'indique, je serais intéressé de trouver un moyen sûr de détecter Google Chrome sur la base de fonctionnalités (sans utiliser navigator.appName ni navigator.appVersion).

Par fonctionnalité, je veux dire, par exemple:

if(window.ActiveXObject) {
    // internet explorer!
}

Modifier: Comme cela a été souligné, la question n'a pas beaucoup de sens (évidemment, si vous souhaitez implémenter une fonctionnalité, vous la testez, si vous souhaitez détecter un navigateur spécifique , vous vérifiez l’agent utilisateur), désolé, il est 5h du matin;) Laissez-moi le formuler comme suit: existe-t-il des objets javascript et / ou des fonctionnalités propres à Chrome ...

Était-ce utile?

La solution

isChrome = function() {
    return Boolean(window.chrome);
}

Autres conseils

Cette réponse est très dépassée , mais elle était très pertinente à l'époque de la pierre.

Je pense que la détection de fonctionnalité est plus utile que l'analyse par navigator.userAgent, car j'ai cherché l'ambiguïté d'Opera ici . Personne ne peut savoir si IE16 analysera le / MSIE 16.0; / regexp - mais on peut en être tout à fait sûr, il y aura le support document.all. Dans la vie réelle, les fonctionnalités sont généralement des synonymes pour les navigateurs, telles que: "No XMLHttpRequest?" C'est le f .... d IE6! & Quot; Aucun navigateur non EIE ne prend en charge document.all, mais certains navigateurs tels que Maxthon peuvent brouiller userAgent. (Bien sûr, le script peut définir document.all dans Firefox pour une raison quelconque, mais il est facile à contrôler.) C'est pourquoi je suggère cette solution.

Modifier Ici I trouvé des ressources complètes.

Éditer 2 : j'ai testé ce document.all est également supporté par Opera!

var is = {
  ff: window.globalStorage,
  ie: document.all && !window.opera,
  ie6: !window.XMLHttpRequest,
  ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera,
  ie8: document.documentMode==8,
  opera: Boolean(window.opera),
  chrome: Boolean(window.chrome),
  safari: window.getComputedStyle && !window.globalStorage && !window.opera
}

L'utilisation est simple:

if(is.ie6) { ... }

Ce n'est pas exactement une réponse à la question ... mais si vous essayez de détecter une marque de navigateur spécifique, le point de vérification des fonctionnalités est un peu perdu. Je doute fortement que d’autres navigateurs utilisent la chaîne Chrome userAgent. Par conséquent, si votre question est "est-ce que ce navigateur est Chrome", vous devriez simplement regarder cela. (Au fait, window.ActiveXObject ne garantit pas IE, il existe des plug-ins pour les autres navigateurs qui fournissent cet objet. Quel type d'illustration illustre ce que j'essayais de dire?)

Pour tous les nazis aux normes ... vous pouvez parfois utiliser des "technologies standard" de saignée. qui ne sont pas encore standard mais qui le seront ... telles que les fonctionnalités css3.

Quelle est la raison pour laquelle j'ai trouvé cette page.

Pour une raison quelconque, Safari exécute une combinaison de bord-radius avec box-shadow parfaitement, mais chrome ne rend pas la combinaison correctement. Il serait donc intéressant de trouver un moyen de détecter le chrome, même si Webkit désactive la combinaison.

J'ai rencontré des centaines de raisons de détecter un navigateur / une version spécifique qui finissent généralement par supprimer l'idée d'une fonctionnalité intéressante, car ce que je veux faire n'est pas pris en charge par le grand mal ...

Mais parfois, certaines fonctionnalités sont trop cool pour ne pas les utiliser, même si elles ne sont pas encore normalisées.

Donc, si vous acceptez le point de Marijn et que êtes intéressé à tester la chaîne de l'agent utilisateur via javascript:

var is_chrome = navigator.userAgent.toLowerCase (). indexOf ('chrome') > -1;

(crédit à: http://davidwalsh.name/detecting-google-chrome-javascript )

Voici une très bonne analyse / décomposition de la chaîne d’agent utilisateur chromes: http://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string

J'utilise souvent la détection de comportement / de capacité. Vérifiez directement si le navigateur prend en charge les fonctionnalités avant de travailler dessus, au lieu de le faire en fonction de ce que pourrait être le nom du navigateur (agent utilisateur).

Un problème lié aux solutions de contournement spécifiques au navigateur est que vous ne savez pas si le bogue a été corrigé ou si la fonctionnalité est prise en charge maintenant. Lorsque vous effectuez une détection de fonctionnalité, vous savez que le navigateur le prend en charge directement ou non, et vous n'êtes pas seulement un navigateur-ist.

http://diveintohtml5.ep.io/everything.html

Vous ne devriez pas détecter Chrome spécifiquement. Si tel est le cas, vous devriez détecter WebKit, car en ce qui concerne le rendu des pages, Chrome devrait se comporter exactement comme les autres navigateurs WebKit (Safari, Epiphany).

Si vous devez non seulement détecter WebKit, mais aussi savoir exactement quelle version est utilisée, consultez le lien suivant: http://trac.webkit.org/wiki/DetectingWebKit

Mais encore une fois, comme d'autres personnes l'ont dit plus haut, vous ne devriez pas détecter les navigateurs, vous devriez détecter les fonctionnalités. Voir cet article de l'ADC pour plus d'informations à ce sujet: http://developer.apple.com/internet /webcontent/objectdetection.html

Une des raisons pour lesquelles vous devez connaître le navigateur, c'est que Chrome est dû au fait qu'il est "parfaitement" conforme aux normes. J'ai déjà rencontré des problèmes avec l'ancien code JavaScript qui, à mon avis, était conforme aux normes (normes FF ou Opera, qui sont plutôt bonnes), mais Chrome était encore plus difficile. Cela m'a obligé à réécrire du code, mais il peut parfois être plus facile d'utiliser le truc if (isChrome) {blah ... blah) pour le faire fonctionner. Chrome semble fonctionner très bien (je suis pour la conformité standard), mais parfois, vous avez juste besoin de savoir ce que l'utilisateur exécute dans les moindres détails.

De plus, Chrome est très rapide. Le problème, c’est que du code JavaScript dépend involontairement de la lenteur des autres navigateurs, par exemple: chargement de page, chargement d’iframe, placement des liens de feuilles de style et des liens javascript dans l’en-tête de page, etc. Cela peut entraîner de nouveaux problèmes de disponibilité des fonctions pour interagir avec les éléments de la page. Donc, pour le moment, vous pourriez avoir vraiment besoin de savoir ...

J'utilise ce code pour créer des signets pour chaque navigateur (ou pour afficher un message pour Webkit)

if (window.sidebar) { 
// Mozilla Firefox Bookmark
window.sidebar.addPanel(title, url,"");
} else if( window.external ) { // IE Favorite
  if(window.ActiveXObject) {
  //ie
  window.external.AddFavorite( url, title);
  } else {
  //chrome
  alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok');
  }
} else if(window.opera && window.print) { 
// Opera
  return true; }
 else { //safri
 alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok'); }

Il peut y avoir des faux positifs car opera possède également un objet window.chrome . Comme solution intéressante, j’utilise;

var isOpera = !!window.opera || !!window.opr;// Opera 8.0+

var isChrome = !!window.chrome && !isOpera;

Cette solution fonctionne presque toujours. Cependant, une chose que j’ai découverte est que isChrome renvoie false dans la version 52.0 de l’iPad Chrome sous la forme window.chrome renvoie false . .

isIE: !! (! window.addEventListener & amp; & amp; & amp; & window.ActiveXObject),

isIE6: typeof document.createElement ('DIV'). style.maxHeight == "Undefined",

isIE7: !! (! window.addEventListener & amp; & amp; & amp; window.XMLHttpRequest & amp; & amp;! document.querySelectorAll),

isIE8: !! (! window.addEventListener & amp; & amp; document.querySelectorAll & amp & & amp.documentMode == 8),

isGecko: navigator.product == 'Gecko',

isOpera: !! window.opera,

isChrome: !! window.chrome,

isWebkit: !! (! window.opera & amp; & navigator.taintEnable & amp; & amp; document.evaluate & amp; & amp; & navigator.product! = 'Gecko'),

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top