Frage

Wie der Titel, würde ich interessieren, eine sichere merkmalsbasierte zu finden (das heißt, ohne die Verwendung von navigator.appName oder navigator.appVersion) Art und Weise Google Chrome zu erkennen.

Durch die merkmalsbasierte ich meine, zum Beispiel:

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

Edit: Wie darauf hingewiesen hat worden ist, stellt sich die Frage nicht viel Sinn (offensichtlich machen, wenn Sie eine Funktion implementieren möchten, können Sie es testen, wenn Sie für einen bestimmten Browser erkennen wollen Sie den User-Agent überprüfen), sorry, es ist 05.00;) me Lassen Sie mich Phrase es wie folgt aus: gibt es JavaScript-Objekte und / oder Funktionen, die Chrome einzigartig sind ...

War es hilfreich?

Lösung

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

Andere Tipps

Diese Antwort ist sehr veraltet , aber es war sehr relevant damals in der Steinzeit.

Ich denke Merkmal erkennen ist nützlicher als navigator.userAgent Parsing, wie ich Opera ambiguosity gegoogelt hier . Niemand kann wissen, ob IE16 das / MSIE 16.0 analysieren wird; / regexp - aber wir können ganz sicher sein, wird es die document.all Unterstützung. Im wirklichen Leben sind die Funktionen, die normalerweise Synonyme für den Browser, wie: „? Nein XMLHttpRequest ist es, f .... d IE6“ Kein Nonie Browser unterstützt document.all, aber einige Browser wie Maxthon können die Useragent unkenntlich zu machen. (Natürlich Skript kann aus irgendeinem Grunde in Firefox definieren document.all, aber es ist easilly steuerbar.) Deshalb schlage ich vor, diese Lösung.

Bearbeiten Hier I fanden umfangreiche Ressourcen.

Edit 2 Ich habe getestet, dass document.all auch von Opera unterstützt wird!

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
}

Unter Verwendung ist einfach:

if(is.ie6) { ... }

Nicht gerade eine Antwort auf die Frage ... aber wenn Sie einen bestimmten Browser Marke zu erkennen versuchen, wird der Punkt von Merkmalsprüfung Art verloren. Ich bezweifle stark, alle anderen Browser auf das Chrome-Useragent-String verwenden, also, wenn Ihre Frage ist, ‚ist dieser Browser Chrome‘, sollten Sie nur das betrachten. (By the way, window.ActiveXObject nicht IE garantieren, gibt es Plug-In für anderen Browser, die dieses Objekt zur Verfügung stellen. Welche Art des Punkt zeigt ich versucht wurde zu machen.)

Für alle Standards nazis ... manchmal möchten Sie vielleicht Ausbluten „Standardtechnologien“ verwenden, die nicht nur noch Standard, aber sie werden ... Wie CSS3-Funktionen.

Was ist der Grund, warum ich diese Seite gefunden.

Aus irgendeinem Grunde läuft Safari eine Combo von border-radius mit box-shadow ganz gut, aber Chrom macht nicht die Kombination richtig. So wäre es schön, einen Weg zu finden, Chrom zu erkennen, obwohl es webkit ist die Kombination zu deaktivieren.

Ich habe in Hunderte von Gründen läuft eine bestimmten Browser / Version zu ermitteln, die in der Regel in der Verschrottung eine Idee für ein cooles Feature endet weil das, was ich tun mag, nicht von dem großen Übel unterstützt wird ...

Aber manchmal sind einige Funktionen einfach zu cool, um sie nicht zu verwenden, auch wenn sie noch nicht standardisiert ist.

Wenn Sie also Marijn den Punkt und sind interessiert sich für die Prüfung der User-Agent-String über Javascript akzeptieren:

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

(Credit: http://davidwalsh.name/detecting-google-chrome-javascript )


Hier ist eine wirklich schöne Analyse / Abbau des chromes User-Agent-String: http://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string

Ich verwende oft Verhalten / Fähigkeit Erkennung. Direkt überprüfen, ob der Browser um sie Funktionalität vor der Arbeit unterstützt, sondern um sie zu arbeiten auf, was könnte die Browser-Name (User-Agent) sein.

Ein Problem mit browserspezifischen Abhilfen, ist, dass Sie nicht wissen, ob der Fehler behoben wurde oder wenn das Feature jetzt unterstützt wird. Wenn Sie Fähigkeit Erkennung tun, Sie wissen der Browser tut oder hat sie nicht direkt unterstützen, und Sie sind nicht nur sein Browser-ist.

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

Sie sollten nicht spezifisch seine Erkennung Chrome. Wenn überhaupt, sollten Sie WebKit werden erfasst, da so weit wie Seiten-Rendering betrifft, so sollte Chrome verhalten sich genau wie andere WebKit-Browser (Safari, Epiphany).

Wenn Sie brauchen nicht nur WebKit zu erfassen, sondern auch genau herauszufinden, welche Version verwendet wird, finden Sie auf diesen Link: http://trac.webkit.org/wiki/DetectingWebKit

Aber noch einmal, wie andere Leute oben gesagt, Sie sollten nicht Browser erkennen, sollten Sie Merkmale erkennen. Sehen Sie dieses ADC Artikel für weitere Informationen hierzu: http://developer.apple.com/internet /webcontent/objectdetection.html

Ein Grund müssen Sie möglicherweise den Browser wissen ist, Chrome ist, weil es so verdammt Standards kompatibel ‚ist‘. Ich habe laufe bereits Probleme mit altem JavaScript-Code, den ich dachte, war standardkonform (von FF oder Opera Standards - die ziemlich gut sind), aber Chrome war noch wählerisch. Es hat mich gezwungen, einige Codes zu umschreiben, aber manchmal kann es einfacher sein, die zu verwenden, wenn (isChrome) {bla ... bla) Trick es zum Laufen zu bringen. Chrome scheint sehr gut zu funktionieren (ich für Standard-Compliance-bin), aber manchmal müssen Sie nur wissen, was der Benutzer in Grab Detail ausgeführt wird.

Auch Chrome ist sehr schnell. Das Problem ist, unbeabsichtigt einig JavaScript-Code auf der Langsamkeit anderen Browser hängt richtig funktioniert, das heißt: das Laden der Seite, iframe Laden, Platzierung von Sheet Links und JavaScript-Links im Seitenkopf, usw. Diese können neue Probleme verursachen mit, wenn Funktionen sind wirklich verfügbar mit Seitenelementen zu interagieren. So jetzt müssen Sie wirklich wissen ...

Ich benutze diesen Code Lesezeichen für jeden Browser zu machen (oder eine Nachricht für webkit anzuzeigen)

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'); }

Es könnte Fehlalarme, da Oper auch window.chrome Objekt hat. Als schöne Lösung verwende ich;

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

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

Diese Lösung funktioniert fast immer. Aber eine Sache, die ich entdeckte, dass, isChrome kehrt in iPad Chrome-Version 52.0 als false kehrt window.chrome false.

ISIE: (! Window.addEventListener && window.ActiveXObject) !!,

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

.

isIE7: !! (! Window.addEventListener && window.XMLHttpRequest && document.querySelectorAll)

isIE8: (! Window.addEventListener && document.querySelectorAll && document.documentMode == 8) !!,

isGecko: navigator.product == 'Gecko',

isOpera: !! window.opera,

isChrome: !! window.chrome,

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top