Безопасный способ обнаружения Google Chrome с помощью Javascript? - PullRequest
16 голосов
/ 17 сентября 2008

Как гласит заголовок, мне было бы интересно найти безопасный, основанный на функциях (то есть без использования navigator.appName или navigator.appVersion) способ обнаружения Google Chrome.

Под характеристикой я подразумеваю, например:

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

Редактировать: Как уже указывалось, вопрос не имеет особого смысла (очевидно, если вы хотите реализовать функцию, вы проверяете ее, если вы хотите обнаружить для конкретного браузера, Вы проверяете пользовательский агент) Извините, сейчас 5 утра;) Позвольте мне сформулировать это так: Существуют ли какие-либо объекты и / или функции javascript, уникальные для Chrome ...

Ответы [ 11 ]

32 голосов
/ 17 сентября 2008
isChrome = function() {
    return Boolean(window.chrome);
}
9 голосов
/ 18 мая 2010

Этот ответ очень устарел , но тогда он был очень актуален в каменный век.

Я думаю, что функция обнаружения является более полезной, чем анализатор navigator.userAgent, так как я погуглил Opera неоднозначность здесь . Никто не может знать, будет ли IE16 анализировать / MSIE 16.0; / regexp - но мы можем быть совершенно уверены, что будет поддержка document.all. В реальной жизни эти функции обычно являются синонимами для браузеров, например: "Нет XMLHttpRequest? Это f .... d IE6!" Ни один браузер nonIE не поддерживает document.all, но некоторые браузеры, такие как Maxthon, могут шифровать userAgent. (Конечно, скрипт может определять document.all в Firefox по какой-то причине, но его легко контролировать.) Поэтому я предлагаю это решение.

Редактировать Здесь Я нашел полные ресурсы.

Редактировать 2 Я проверял этот документ. Все также поддерживается 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
}

Использование просто:

if(is.ie6) { ... }
4 голосов
/ 24 февраля 2009

Для всех нацистских стандартов ... иногда вы можете использовать кровоточащие "стандартные технологии", которые еще не являются стандартными, но они будут ... Такие как функции css3.

По этой причине я нашел эту страницу.

По какой-то причине Safari запускает комбинацию border-radius с box-shadow, но Chrome неправильно отображает комбинацию. Поэтому было бы неплохо найти способ обнаружения хрома, даже если это отключение комбинации с помощью webkit.

Я столкнулся с сотнями причин обнаружить конкретный браузер / версию, которая обычно сводит на нет идею классной функции, потому что то, что я хочу сделать, не поддерживается большим злом ...

Но иногда некоторые функции слишком круты, чтобы их не использовать, даже если они еще не стандартизированы.

4 голосов
/ 17 сентября 2008

Не совсем ответ на вопрос ... но если вы пытаетесь определить конкретную марку браузера, то проверка функций теряется. Я очень сомневаюсь, что любые другие браузеры используют строку userAgent Chrome, поэтому, если ваш вопрос «это браузер Chrome», вам стоит просто посмотреть на это. (Кстати, window.ActiveXObject не гарантирует IE, есть плагины для других браузеров, которые предоставляют этот объект. Какой вид иллюстрирует точку, которую я пытался сделать.)

1 голос
/ 18 мая 2010

Я часто использую определение поведения / способностей. Непосредственно проверьте, поддерживает ли браузер функциональность, прежде чем обходить его, вместо того чтобы обходить его, основываясь на том, что может быть именем браузера (user-agent).

Проблема с обходными путями, специфичными для браузера, заключается в том, что вы не знаете, исправлена ​​ли ошибка или поддерживается ли эта функция сейчас. Когда вы определяете возможности, вы знаете, , что браузер поддерживает или не поддерживает его напрямую, и вы не просто являетесь браузером.

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

1 голос
/ 17 сентября 2008

Итак, если вы принимаете точку Марийна, и заинтересованы в тестировании строки агента пользователя с помощью javascript:

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

(Кредит: http://davidwalsh.name/detecting-google-chrome-javascript)


Вот действительно хороший анализ / разбивка строки пользовательского агента chromes: http://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string

0 голосов
/ 20 июня 2018

Там могут быть ложные срабатывания, так как опера также имеет объект window.chrome. В качестве хорошего решения я использую;

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

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

Это решение почти всегда работает. Однако я обнаружил, что isChrome возвращает false в iPad Chrome версии 52.0, а window.chrome возвращает false.

0 голосов
/ 07 июля 2010

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

isIE6: typeof document.createElement ('DIV'). Style.maxHeight == "undefined",

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

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

isGecko: navigator.product == 'Gecko',

isOpera: !! window.opera,

isChrome: !! window.chrome,

isWebkit: !! (! Window.opera &&! Navigator.taintEnable && document.evaluate && navigator.product! = 'Gecko'),

0 голосов
/ 26 марта 2009

Я использую этот код для создания закладок для каждого браузера (или для отображения сообщения для веб-набора)

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'); }

0 голосов
/ 24 февраля 2009

Одна из причин, по которой вам, возможно, понадобится узнать браузер, - это Chrome, потому что он «чертовски совместим со стандартами». Я уже сталкивался с проблемами со старым кодом JavaScript, который, по моему мнению, соответствовал стандартам (по стандартам FF или Opera - что очень хорошо), но Chrome был еще более требователен Это заставило меня переписать некоторый код, но иногда было бы проще использовать трюк if (isChrome) {blah ... blah) для его запуска. Похоже, что Chrome работает очень хорошо (я за соответствие стандарту), но иногда вам просто нужно знать, что пользователь запускает в мельчайших подробностях.

Кроме того, Chrome очень быстрый. Проблема в том, что некоторый код JavaScript непреднамеренно зависит от медленной работы других браузеров, например, загрузки страницы, загрузки iframe, размещения ссылок на таблицы стилей и ссылок javascript в заголовке страницы и т. Д. Это может вызвать новые проблемы, когда функции действительно доступны. взаимодействовать с элементами страницы. Так что сейчас вам действительно нужно знать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...