Мені потрібна деяка функція, що повертає булеве значення, щоб перевірити, чи браузер 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'.
Ви більше не можете використовувати строго рівне істинне для реєстрації в IE window.chrome
. IE раніше повертався undefined
, тепер він повертається true
. Але вгадайте що, IE11 тепер знову повертається невизначеним. 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
Щойно була випущена 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
Додано чек на iOS Chrome CriOS
за допомогою виведення true
для Chrome на iOS. Завдяки xinthose за те, що повідомили нам про це!
ОНОВЛЕННЯ 18.04.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;
!!
Просто перетворює об'єкт в логічне значення. У веб-переглядачах undefined
, які не входять у хром, ця властивість буде , що не є правдою.
Зауважте, це також повертає істину для версій 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.
Ви можете використовувати:
navigator.userAgent.indexOf("Chrome") != -1
Він працює на v.71
navigator.userAgent.includes("Chrome")
Підходить для мене на 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
існує лише в Opera. Edge
існує лише в Edge. Тож для перевірки на Chrome ці рядки не повинні бути.
Що стосується Firefox та IE, я не можу пояснити, що вони роблять.
Я додаю цю функціональність до пакета, який я пишу
всі відповіді неправильні. "Opera" та "Chrome" однакові у всіх випадках.
(відредагована частина)
ось правильна відповідь
if (window.chrome && window.chrome.webstore) {
// this is Chrome
}
window.chrome.webstore
Заразundefined