Мне нужна функция, возвращающая логическое значение, чтобы проверить, является ли браузер Chrome .
Как мне создать такую функциональность?
Мне нужна функция, возвращающая логическое значение, чтобы проверить, является ли браузер Chrome .
Как мне создать такую функциональность?
Ответы:
Обновление: Пожалуйста, смотрите ответ Джонатана для обновленного способа справиться с этим. Ответ ниже может все еще работать, но это могло бы вызвать некоторые ложные срабатывания в других браузерах.
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
Однако, как уже упоминалось, пользовательские агенты могут быть подделаны, поэтому всегда лучше использовать обнаружение функций (например, Modernizer ) при решении этих проблем, как упоминают другие ответы.
var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Google Inc
к navigator.vendor
, так что этот метод не пуленепробиваемый, что-то вроде /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)
бы, вероятно, будет работать лучше
Чтобы проверить, является ли браузер 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 теперь снова возвращает undefined. IE11 также возвращает пустую строку ""
для window.navigator.vendor
.
Надеюсь, это поможет!
ОБНОВИТЬ:
Спасибо Halcyon991 за указание ниже, что новая Opera 18+ также выводит значение true для window.chrome
. Похоже, что Opera 18 основана на Chromium 31 . Поэтому я добавил проверку, чтобы убедиться, что window.navigator.vendor
: "Google Inc"
а не есть "Opera Software ASA"
. Также спасибо Ring и Adrien Be за сообщения о том, что Chrome 33 больше не возвращает истину ... window.chrome
теперь проверяет, если не ноль. Но обратите пристальное внимание на 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
того, что он выводит undefined
для .. даже если IE11 выводит для window.chrome
. Спасибо artfulhacker, что сообщили нам об этом!
ОБНОВЛЕНИЕ 5/5/2016 - дополнение для проверки iOS Chrome
Добавлена проверка для iOS Chrome, так CriOS
как он выводит true
Chrome на iOS. Спасибо xinthose за сообщение об этом!
ОБНОВЛЕНИЕ 18/18/2018 - изменение для проверки Opera
Отредактированный чек на Opera, проверка window.opr
не undefined
так как теперь Chrome 66 имеет OPR
в window.navigator.vendor
. Спасибо Frosty Z и Daniel Wallman за сообщение об этом!
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
, поэтому isChrome()
возвращает false .
window.opr
нет undefined
.
еще короче var is_chrome = /chrome/i.test( navigator.userAgent );
true
в Microsoft Edge.
Гораздо проще решение просто использовать:
var isChrome = !!window.chrome;
!!
Просто преобразует объект в логическое значение. В не Chrome браузерах это свойство будет undefined
, что не соответствует действительности.
Обратите внимание, что это также возвращает true для версий Edge, основанных на Chrome (спасибо @Carrm за указание на это).
true
к window.chrome
. Проверьте conditionizr.com, который имеет пуленепробиваемое обнаружение + исправление.
!!
преобразует значение быть либо true
или false
. typeof(window.chrome)
дает "object"
, тогда как typeof(!!window.chrome)
дает "boolean"
. Ваш пример кода также работает, потому что if
оператор выполняет преобразование.
true
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
в Microsoft Edge.
Вы также можете захотеть конкретную версию Chrome:
var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
var uaArray = ua.split(' ')
, version = uaArray[uaArray.length - 2].substr(7);
}
Извиняюсь перед Большим Лебовски за использование его ответа в моем.
"537.36"
в Microsoft Edge.
У меня работает на Chrome на Mac. Кажется, будет или проще, или более надежным (в случае проверки строки userAgent), чем все выше.
var isChrome = false;
if (window.chrome && !window.opr){
isChrome = true;
}
console.log(isChrome);
const isChrome = window.chrome && !window.opr;
Пользователь может изменить пользовательский агент. Попробуйте протестировать webkit
свойство с префиксом в style
объекте body
элемента
if ("webkitAppearance" in document.body.style) {
// do stuff
}
Проверьте это: Как обнаружить браузер Safari, Chrome, IE, Firefox и Opera?
В вашем случае: var isChrome = !! window.chrome && (!! window.chrome.webstore || !! window.chrome.runtime);
Чтобы узнать названия различных настольных браузеров (Firefox, IE, Opera, Edge, Chrome). Кроме сафари.
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;
}
Работает в следующих версиях браузера:
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)
Посмотреть суть здесь и скрипка здесь
Оригинальный фрагмент кода больше не работал для Chrome, и я забыл, где я его нашел. Раньше у него было сафари, но у меня больше нет доступа к сафари, поэтому я больше не могу проверить.
Только Firefox и IE коды были частью оригинального фрагмента.
Проверка Opera, Edge и Chrome выполняется напрямую. У них есть различия в userAgent. OPR
существует только в опере.Edge
существует только в Edge. Таким образом, чтобы проверить наличие Chrome, этих строк не должно быть.
Что касается Firefox и IE, я не могу объяснить, что они делают.
Я буду добавлять эту функциональность в пакет, который я пишу
все ответы неверны. «Опера» и «Хром» одинаковы во всех случаях.
(отредактированная часть)
вот правильный ответ
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstore
Сейчасundefined