Domanda

Come afferma il titolo, sarei interessato a trovare un modo sicuro basato su funzionalità (ovvero senza utilizzare navigator.appName o navigator.appVersion) per rilevare Google Chrome.

Per basato sulle funzionalità intendo, ad esempio:

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

Modificare: Come è stato sottolineato, la domanda non ha molto senso (ovviamente se vuoi implementare una funzionalità, la provi, se vuoi rilevarla per un browser specifico, controlli lo user agent), scusa, sono le 5 del mattino ;) Permettimi di esprimerlo in questo modo:Esistono oggetti e/o funzionalità JavaScript esclusivi di Chrome...

È stato utile?

Soluzione

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

Altri suggerimenti

Questa risposta è molto obsoleta, ma allora era molto rilevante nell'età della pietra.

Penso che il rilevamento delle funzionalità sia più utile dell'analisi di navigator.userAgent, poiché ho cercato su Google l'ambiguità di Opera Qui.Nessuno può sapere se IE16 analizzerà /MSIE 16.0;/ regexp, ma possiamo essere abbastanza sicuri che ci sarà il supporto document.all.Nella vita reale, le funzionalità sono solitamente sinonimi dei browser, come: "Nessuna richiesta XMLHttp?È il f....d IE6!"Nessun browser diverso da IE supporta document.all, ma alcuni browser come Maxthon possono codificare userAgent.(Ovviamente lo script può definire document.all in Firefox per qualche motivo, ma è facilmente controllabile.) Pertanto suggerisco questa soluzione.

Modificare Qui Ho trovato risorse complete.

Modifica 2 Ho testato che document.all è supportato anche da 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
}

Usare è semplice:

if(is.ie6) { ... }

Non esattamente una risposta alla domanda...ma se stai cercando di rilevare una marca di browser specifica, lo scopo del controllo delle funzionalità viene perso.Dubito fortemente che altri browser utilizzino la stringa userAgent di Chrome, quindi se la tua domanda è "questo browser è Chrome", dovresti semplicemente guardarlo.(A proposito, window.ActiveXObject non garantisce IE, ci sono plug-in per altri browser che forniscono questo oggetto.Il che illustra il punto che stavo cercando di sottolineare.)

Per tutti gli standard nazisti...a volte potresti voler utilizzare le sanguinanti "tecnologie standard" che non sono ancora standard ma lo saranno...Come le funzionalità CSS3.

Questo è il motivo per cui ho trovato questa pagina.

Per qualche ragione, Safari esegue correttamente una combinazione di border-radius e box-shadow, ma Chrome non rende correttamente la combinazione.Quindi sarebbe bello trovare un modo per rilevare Chrome anche se è il webkit a disabilitare la combinazione.

Mi sono imbattuto in centinaia di motivi per rilevare un browser/versione specifico che di solito finisce per scartare un'idea per una funzionalità interessante perché ciò che voglio fare non è supportato dal grande male...

Ma a volte alcune funzionalità sono semplicemente troppo interessanti per non utilizzarle, anche se non sono ancora standardizzate.

Quindi, se accetti il ​​punto di Marijn e Sono interessato a testare la stringa dello user agent tramite javascript:

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

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


Ecco un'analisi/analisi davvero interessante della stringa dello user agent di Chrome: http://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string

Utilizzo spesso il rilevamento del comportamento/capacità.Controlla direttamente se il browser supporta la funzionalità prima di aggirarla, invece di aggirarla in base a quello che potrebbe essere il nome del browser (user-agent).

Un problema con le soluzioni alternative specifiche del browser è che non sai se il bug è stato corretto o se la funzionalità è ora supportata.Quando esegui il rilevamento delle capacità, tu Sapere il browser lo supporta o non lo supporta direttamente e non sei solo un browser-ista.

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

Non dovresti rilevare Chrome in modo specifico.Se non altro, dovresti rilevare WebKit, poiché per quanto riguarda il rendering della pagina, Chrome dovrebbe comportarsi esattamente come gli altri browser WebKit (Safari, Epiphany).

Se hai bisogno non solo di rilevare WebKit, ma anche di scoprire esattamente quale versione viene utilizzata, consulta questo collegamento: http://trac.webkit.org/wiki/DetectingWebKit

Ma ancora una volta, come hanno detto altre persone sopra, non dovresti rilevare i browser, dovresti rilevare le funzionalità.Vedi questo articolo di ADC per ulteriori informazioni al riguardo: http://developer.apple.com/internet/webcontent/objectdetection.html

Uno dei motivi per cui potresti dover conoscere il browser Chrome è perché "è" così dannatamente conforme agli standard.Ho già riscontrato problemi con il vecchio codice JavaScript che pensavo fosse conforme agli standard (secondo gli standard FF o Opera, che sono piuttosto buoni), ma Chrome è stato ancora più esigente.Mi ha costretto a riscrivere del codice, ma a volte potrebbe essere più semplice usare il trucco if(isChrome) { blah...blah ) per farlo funzionare.Chrome sembra funzionare molto bene (io sono per la conformità agli standard), ma a volte hai solo bisogno di sapere in dettaglio cosa sta eseguendo l'utente.

Inoltre, Chrome è molto veloce.Il problema è che parte del codice JavaScript dipende involontariamente dalla lentezza degli altri browser per funzionare correttamente, ad esempio:caricamento della pagina, caricamento iframe, posizionamento di collegamenti a fogli di stile e collegamenti javascript nell'intestazione della pagina, ecc.Ciò può causare nuovi problemi riguardo a quando le funzioni sono realmente disponibili per interagire con gli elementi della pagina.Quindi per ora, potresti davvero aver bisogno di sapere...

Utilizzo questo codice per creare segnalibri per ciascun browser (o visualizzare un messaggio per 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'); }

Potrebbero esserci falsi positivi poiché anche l'opera ne ha window.chrome oggetto.Come una bella soluzione che uso;

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

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

Questa soluzione funziona quasi sempre.Tuttavia una cosa che ho scoperto è che, isChrome ritorna false in iPad Chrome versione 52.0 come window.chrome ritorna false.

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

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

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

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

isGecko:navigator.product == 'Geco',

èOpera:!!finestra.opera,

èChrome:!!finestra.cromo,

èWebkit:!!(!window.opera && !navigator.taintEnable && document.evaluate && navigator.product != 'Gecko'),

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top