JavaScript: Как узнать, является ли браузер пользователя Chrome? - PullRequest
197 голосов
/ 30 декабря 2010

Мне нужна функция, возвращающая логическое значение, чтобы проверить, является ли браузер Chrome .

Как мне создать такую ​​функциональность?

Ответы [ 13 ]

287 голосов
/ 12 ноября 2012

Чтобы проверить, является ли браузер Google Chrome , попробуйте следующее:

// 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 
}

Пример использования: http://codepen.io/jonathan/pen/WpQELR

Причина, по которой это работает, заключается в том, что если вы используете инспектор Google Chrome и переходите на вкладку консоли. Введите «окно» и нажмите Enter. Затем вы сможете просмотреть свойства DOM для «объекта окна». Когда вы свернете объект, вы сможете просмотреть все свойства, включая свойство 'chrome'.

Вы больше не можете использовать строго равные true, чтобы проверить в IE значение window.chrome. IE раньше возвращал undefined, теперь возвращает true. Но угадайте, что, теперь IE11 снова возвращает неопределенное значение. IE11 также возвращает пустую строку "" для window.navigator.vendor.

Надеюсь, это поможет!

UPDATE:

Спасибо Halcyon991 за указание ниже, что новая Opera 18+ также выводит значение true для window.chrome. Похоже, Opera 18 основана на Хром 31 . Поэтому я добавил проверку, чтобы убедиться, что window.navigator.vendor: "Google Inc", а не "Opera Software ASA". Также благодаря Ring и Adrien Be за сообщения о том, что Chrome 33 больше не возвращает истину ... window.chrome теперь проверяет, не равно ли NULL. Но обратите пристальное внимание на IE11, я добавил проверку для undefined, так как IE11 теперь выводит undefined, как это было при первом выпуске ... затем после некоторых сборок обновлений он вывел на true .. теперь сборка последних обновлений вывод undefined снова. Microsoft не может определиться!

ОБНОВЛЕНИЕ 24.07.2015 - дополнение для проверки Opera

Опера 30 была только что выпущена. Больше не выводит window.opera. А также window.chrome выводит значение true в новой Opera 30. Поэтому вы должны проверить, находится ли OPR в userAgent . Я обновил свое условие выше, чтобы учесть это новое изменение в Opera 30, поскольку оно использует тот же механизм рендеринга, что и Google Chrome.

ОБНОВЛЕНИЕ 13.10.2015 - дополнение для проверки IE

Добавлена ​​проверка IE Edge, поскольку он выводит true для window.chrome .. даже если IE11 выводит undefined для window.chrome. Спасибо artfulhacker за сообщение об этом!

ОБНОВЛЕНИЕ 2/5/2016 - дополнение для iOS Chrome check

Добавлена ​​проверка для iOS Проверка Chrome CriOS из-за того, что она выводит true для Chrome на iOS. Спасибо xinthose за сообщение об этом!

ОБНОВЛЕНИЕ 18.04.2017 - изменение для проверки Opera

Отредактированная проверка для Opera, проверка window.opr не undefined, так как теперь Chrome 66 имеет OPR в window.navigator.vendor. Спасибо Frosty Z и Daniel Wallman за сообщение об этом!

188 голосов
/ 30 декабря 2010

Обновление: см. ответ Джонатана для обновленного способа справиться с этим. Ответ ниже может все еще работать, но он может вызвать некоторые ложные срабатывания в других браузерах.

var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);

Однако, как уже упоминалось, пользовательские агенты могут быть подделаны, поэтому всегда лучше использовать функцию обнаружения (например, Modernizer ) при решении этих проблем, как упоминают другие ответы.

21 голосов
/ 09 мая 2012

еще короче: var is_chrome = /chrome/i.test( navigator.userAgent );

13 голосов
/ 19 января 2017

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, '  '));
13 голосов
/ 05 декабря 2013

Гораздо более простое решение - просто использовать:

var isChrome = !!window.chrome;

!! просто преобразует объект в логическое значение. В браузерах без Chrome это свойство будет undefined, что неверно.

8 голосов
/ 30 декабря 2010
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );
2 голосов
/ 07 декабря 2018

Вы можете использовать:

navigator.userAgent.indexOf("Chrome") != -1

Работает на v.71

2 голосов
/ 07 августа 2012

Вам также может потребоваться конкретная версия Chrome:

var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
    var uaArray = ua.split(' ')
    ,   version = uaArray[uaArray.length - 2].substr(7);
}

Извинения Большому Лебовски за использование его ответа в моем.

1 голос
/ 28 февраля 2019

У меня работает на Chrome на Mac.Кажется, будет или проще или более надежным (в случае проверки строки userAgent), чем все выше.

        var isChrome = false;
        if (window.chrome && !window.opr){
            isChrome = true;
        }
        console.log(isChrome);
1 голос
/ 26 октября 2015

Пользователь может изменить пользовательский агент.Попробуйте протестировать свойство webkit с префиксом в style объекте body элемента

if ("webkitAppearance" in document.body.style) {
  // do stuff
}
...