Измените стиль в зависимости от агента пользователя браузера

#javascript #css #cross-browser

Вопрос:

Я чувствую, что действительно близок к тому, чтобы это было правильно, но, похоже, это не работает. Кто-нибудь, пожалуйста, может мне помочь?

 var userAgent = navigator.userAgent.toLowerCase();
if (userAgent.indexOf('OPR') != -1) {
  if (userAgent.indexOf('Chrome') > -1) {
    //browser is chrome
    $("#evs").addClass(".chrome");
  } else {
    //browser is opera, add css
    $("#evs").addClass(".opera");
  }
}
 

Комментарии:

1. Извините, я немного изменил, так и должно быть . В нижнем регистре

2. Хорошо, я постараюсь лучше объяснить, что я пытаюсь сделать: этот код пытается выбрать объект с помощью идентификатора is и добавить класс в is на основе браузера, в котором он просматривается. OPR-это агент для браузера Opera, а #evs-идентификатор изображения, в котором я пытаюсь перемещаться.

3. да, но разве я не могу выбрать браузер по имени или агенту пользователя? Он по-прежнему появляется как версия Opera 73

4. Таким образом, проблема, с которой я все еще сталкиваюсь, заключается в том, что изображение, о котором идет речь, не отображается в Opera или Chrome сейчас, когда я добавляю этот код. И я не могу понять, почему…

5. Похоже, что класс не добавляется к изображению с помощью этого кода. <img id="evs" class="" src="sources/housekeeping/evs_dark.png" height="247" width="554px">

Ответ №1:

  • Сначала вы используете .toLowercase() , но пытаетесь сопоставить символы верхнего регистра: 'OPR' , 'Chrome'
  • jQuery .addClass() ожидает строку имени класса (без точки), например: $("#evs").addClass("chrome"); — то же самое относится к методу classList.add() JS:

Вот мое предложение:

 const UA = navigator.userAgent;
const EL_evs = document.querySelector("#evs");

if (/Chrome//i.test(UA)) {       // Case insensitive (i) if needed?

  if (/OPR//.test(UA)) {         // Case sensitive
    EL_evs.classList.add("UA-opera");
  } else if (/Edg//.test(UA)) {  // Case sensitive
    EL_evs.classList.add("UA-edge");
  } else {
    EL_evs.classList.add("UA-chrome");
  }

} 
 .UA-chrome { background: gold; }
.UA-edge   { background: blue; }
.UA-opera  { background: red; } 
 <div id="evs">TEST</div>