Безопасный основанный на функции путь к обнаружению Google Chrome с JavaScript?

Итак, у вас есть два возможных условия, которые вы хотите исправить:

  1. Смещение часового пояса занимает раннее утреннее время и дает отрицательный результат. Я верю, что ваш код справится с этим.
  2. Смещение часового пояса принимает результат поздним вечером и делает его больше 24. В вашем коде отсутствует эта настройка.

Попробуйте

foo.forEach((fooPoint) => {
  fooPoint.hour -= this.state.timeZoneOffset;
  fooPoint.hour = 
     fooPoint.hour < 0
     ? fooPoint.hour + 24
     : foorPoint.hour >= 24
       ? fooPoint.hour - 24
       : fooPoint.hour;
});

Убрать вычитание только потому, что я ленивый и не хочу повторять это пять раз.

Важнейшей частью здесь является проверка обеих возможностей.

Вы также можете найти его более читабельным как if высказывания.

foo.forEach((fooPoint) => {
    fooPoint.hour -= this.state.timeZoneOffset;
    if (fooPoint.hour < 0) {
        fooPoint.hour += 24;
    } else if (fooPoint.hour >= 24) {
        fooPoint.hour -= 24;
    }
});

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

16
задан jeannicolas 17 September 2008 в 09:09
поделиться

10 ответов

isChrome = function() {
    return Boolean(window.chrome);
}
32
ответ дан 30 November 2019 в 15:41
поделиться

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

4
ответ дан 30 November 2019 в 15:41
поделиться

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

, Который является причиной, почему я нашел эту страницу.

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

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

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

4
ответ дан 30 November 2019 в 15:41
поделиться

Так, если Вы признаете, что точка Marijn и заинтересована тестированием строки агента пользователя с помощью JavaScript:

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

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

<час>

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

1
ответ дан 30 November 2019 в 15:41
поделиться

Вы не должны обнаруживать Chrome конкретно. В любом случае необходимо обнаруживать WebKit, так как насколько рендеринга страницы затронут, Chrome должен вести себя точно как другие браузеры WebKit (Safari, Крещение).

, Если необходимо не только обнаружить WebKit, но также и узнать точно, какая версия используется, см. эту ссылку: http://trac.webkit.org/wiki/DetectingWebKit

, Но снова, как другие люди сказали выше, Вы не должны обнаруживать браузеры, необходимо обнаружить функции. См. эту статью ADC для больше на этом: http://developer.apple.com/internet/webcontent/objectdetection.html

0
ответ дан 30 November 2019 в 15:41
поделиться

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

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

0
ответ дан 30 November 2019 в 15:41
поделиться

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

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
ответ дан 30 November 2019 в 15:41
поделиться

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

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

Edit Здесь я нашел полные ресурсы.

Edit 2 Я тестировал, что document.all также поддерживается 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) { ... }
9
ответ дан 30 November 2019 в 15:41
поделиться

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

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

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

1
ответ дан 30 November 2019 в 15:41
поделиться

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

isIE6: тип документа .createElement ('DIV'). style.maxHeight == "undefined",

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

isIE8: !! (! окно! .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'),

-1
ответ дан 30 November 2019 в 15:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: