Preciso de alguma função retornando um valor booleano para verificar se o navegador é Chrome .
Como crio essa funcionalidade?
Preciso de alguma função retornando um valor booleano para verificar se o navegador é Chrome .
Como crio essa funcionalidade?
Respostas:
Atualização: consulte a resposta de Jonathan para obter uma maneira atualizada de lidar com isso. A resposta abaixo ainda pode funcionar, mas provavelmente pode desencadear alguns falsos positivos em outros navegadores.
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
No entanto, como mencionado, os agentes do usuário podem ser falsificados, portanto, é sempre melhor usar a detecção de recursos (por exemplo, modernizador ) ao lidar com esses problemas, como outras respostas mencionam.
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Inc
para navigator.vendor
, portanto, esse método não é à prova de balas, algo como /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)
provavelmente funcionaria melhor
Para verificar se o navegador é o Google Chrome , tente o seguinte:
// 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
}
Exemplo de uso: http://codepen.io/jonathan/pen/WpQELR
O motivo disso funciona é porque, se você usar o inspetor do Google Chrome e acessar a guia do console. Digite 'janela' e pressione Enter. Então você poderá visualizar as propriedades do DOM para o 'objeto de janela'. Ao recolher o objeto, você pode visualizar todas as propriedades, incluindo a propriedade 'chrome'.
Você não pode mais usar estritamente igual a true para fazer check-in no IE window.chrome
. O IE costumava retornar undefined
, agora retorna true
. Mas adivinhe, o IE11 agora retorna indefinido novamente. O IE11 também retorna uma sequência vazia ""
parawindow.navigator.vendor
.
Eu espero que isso ajude!
ATUALIZAR:
Obrigado a Halcyon991 por apontar abaixo, que o novo Opera 18+ também gera como verdadeiro window.chrome
. Parece que o Opera 18 é baseado no Chromium 31 . Então eu adicionei uma verificação para garantir que window.navigator.vendor
é: "Google Inc"
e não é "Opera Software ASA"
. Também agradecemos a Ring e Adrien Be pelas informações sobre o Chrome 33 que não retornam mais verdade ... window.chrome
agora verifica se não é nulo. Mas preste muita atenção ao IE11, adicionei a verificação de volta, undefined
já que o IE11 agora undefined
é lançado, como foi o primeiro lançamento .. depois que alguma atualização é criada, ele é gerado true
.. agora a atualização recente está sendo exibida undefined
novamente. A Microsoft não consegue se decidir!
ATUALIZAÇÃO 24/7/2015 - adição para verificação do Opera
O Opera 30 acabou de ser lançado. Não sai mais window.opera
. E também window.chrome
gera true no novo Opera 30. Portanto, você deve verificar se o OPR está no userAgent . Atualizei minha condição acima para explicar essa nova alteração no Opera 30, pois ele usa o mesmo mecanismo de renderização do Google Chrome.
ATUALIZAÇÃO 13/10/2015 - adição para verificação do IE
Adicionada verificação para o IE Edge devido à saída true
para window.chrome
.. mesmo que o IE11 produz undefined
para window.chrome
. Agradecemos a artfulhacker por nos informar sobre isso!
ATUALIZAÇÃO 5/5/2016 - adição à verificação do iOS Chrome
Adicionada verificação para iOS Chrome, CriOS
devido à saída true
para Chrome no iOS. Agradecemos a xinthose por nos informar sobre isso!
ATUALIZAÇÃO 18/04/2018 - alterar para verificação do Opera
Verificação editado para Opera, a verificação window.opr
não é undefined
desde agora Chrome 66 tem OPR
no window.navigator.vendor
. Agradecemos a Frosty Z e Daniel Wallman por reportarem isso!
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
, portanto, isChrome()
retorna false .
window.opr
não é undefined
.
ainda mais curto: var is_chrome = /chrome/i.test( navigator.userAgent );
true
no Microsoft Edge.
Uma solução muito mais simples é usar:
var isChrome = !!window.chrome;
O !!
just converte o objeto em um valor booleano. Em navegadores não Chrome, essa propriedade seráundefined
, o que não é verdade.
Observe que isso também retorna verdadeiro para versões do Edge baseadas no Chrome (obrigado @Carrm por apontar isso).
true
para window.chrome
. Confira o conditionizr.com que possui uma correção à prova de balas + detect.
!!
converte o valor para ser um true
ou false
. typeof(window.chrome)
dá "object"
, enquanto typeof(!!window.chrome)
dá "boolean"
. Seu exemplo de código também funciona porque a if
instrução faz a conversão.
true
para o 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
no Microsoft Edge.
Você também pode querer a versão específica do Chrome:
var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
var uaArray = ua.split(' ')
, version = uaArray[uaArray.length - 2].substr(7);
}
Desculpas a The Big Lebowski por usar sua resposta na minha.
"537.36"
no Microsoft Edge.
Você pode usar:
navigator.userAgent.indexOf("Chrome") != -1
Está trabalhando na v.71
navigator.userAgent.includes("Chrome")
Funciona para mim no Chrome no Mac. Parece ser ou mais simples ou mais confiável (no caso de uma sequência de caracteres testada pelo userAgent) do que todas as anteriores.
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
O usuário pode alterar o agente do usuário. Tente testar a webkit
propriedade prefixada no style
objeto de body
elemento
if ("webkitAppearance" in document.body.style) {
// do stuff
}
Verifique isto: Como detectar os navegadores Safari, Chrome, IE, Firefox e Opera?
No seu caso: var isChrome = !! window.chrome && (!! window.chrome.webstore || !! window.chrome.runtime);
Conhecer os nomes dos diferentes navegadores da área de trabalho (Firefox, IE, Opera, Edge, Chrome). Exceto o 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;
}
Funciona nas seguintes versões do navegador:
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)
Veja a essência aqui e o violino aqui
O snippet de código original não funcionava mais no Chrome e esqueci onde o encontrei. Ele tinha safari antes, mas não tenho mais acesso ao safari, portanto não posso mais verificar.
Somente os códigos Firefox e IE faziam parte do snippet original.
A verificação do Opera, Edge e Chrome é simples. Eles têm diferenças no userAgent.OPR
só existe no Opera.Edge
só existe no Edge. Portanto, para verificar o Chrome, essa string não deve estar lá.
Quanto ao Firefox e IE, não sei explicar o que eles fazem.
Vou adicionar essa funcionalidade a um pacote que estou escrevendo
todas as respostas estão erradas. "Opera" e "Chrome" são iguais em todos os casos.
(parte editada)
aqui está a resposta certa
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstore
agora é undefined