Javascript определение браузера: Как узнать браузер javascript — Q&A Хекслет

Определение браузера ‣ Marketer

Автор статьи: Головин Андрей

Если вы разобрались чем отличаются реализации HTML у различных производителей, то это еще половина решения проблемы. ваш скрипт должен «знать» в среде какого браузера он в данный момент работает.

Я уже писал об определении браузеров. Но тогда я использовал самый примитивный код. Дело в том, что реализация отличается даже при изменении в младшей цифре версии. Кроме того есть еще несколько полезных параметров, которые можно «узнать» у пользовательского агента. Для реализации этого я предлагаю вам библиотеку detect.js

Вам достаточно загрузить указанный файл и вставить его в тело своего документа (лучше сделать это в секции <HEAD>) таким образом ( имейте ввиду, что internet explorer версии 3 не понимает такой конструкции. В этом случае просто скопируйте библиотеку в тэг <SCRIPT>):

<SCRIPT TYPE=”text/javascript” SRC=”detect.js”></SCRIPT>
и в вашем распоряжении будет объект br.

Его свойства приведены в следующей таблице:
>

СвойствоОписание
br.nameНазвание браузера: Internet Explorer, Netscape Navigator и Opera
br.shortNameСокращенное название браузера:
EXP – Internet Explorer
NAV – Netscape Navigator
OPR – Opera
br.versionВерсия браузера
br.minorVerМладшая составляющая версии
br.languageЯзык браузера(*)
br.plainAgentStrТо же самое, что и navigator.userAgent
br.plainNameStr То же самое, что и navigator. appName
br.plainVersionStrТо же самое, что и navigator.appVersion

(*) — Указывается язык версии браузера, а не язык, на который настроено отображение страниц.

Кроме того в вашем распоряжении оказывается три логических переменных: IE, NN и OP, которые принимают значение истина в случае если используется Internet Explorer, Netscape Navigator или Opera, соответственно.

использовать, например, можно так:

<b>Вы используете Internet Explorer версии 5.01 </b>

Вот код этого фрагмента:

Вы используете <SCRIPT>document.write(br.name)</SCRIPT>
версии <SCRIPT>document.write(br.version)</SCRIPT>

Необходимо сделать замечание, что этот скрипт определяет версии Opera и Internet Explorer индивидуально, исходя из строки userAgent, так как Opera любой версии на appVersion выдает «3.0», а IE с установленным SP1 — на appMinorVersion выдает «;SP 1;».

Это, конечно, нужная информация, но чаще бывает нужен именно реальный номер версии браузера, т.е. для Opera, например, «3.60b3», а для IE — minorVersion — «01».

Порекомендую вам не устанавливать ссылку на локальную версию этого скрипта, а установить ссылку на скрипт, расположенный на сервере «Опытов». Таким образом на вашей странице будет работать всегда самая последняя версия. Сделать это можно так:

<SCRIPT TYPE=”text/javascript” SRC=”home.ural.ru/~tbi/exper/detect.js”></SCRIPT>

Total

Shares

Совместимость с браузерами | Vue CLI

browserslist

Вы заметите поле browserslist в файле package.json (или файл .browserslistrc), где определяется диапазон браузеров под которые разрабатывается проект. Эти значения будут использоваться в @babel/preset-env и autoprefixer для автоматического определения возможностей JavaScript, которые требуется транспилировать, а также необходимые префиксные правила CSS.

Как указывается диапазон браузеров, можно узнать здесь.

Полифилы

По умолчанию проект Vue CLI использует @vue/babel-preset-app, в котором используется @babel/preset-env и конфигурация browserslist для определения необходимых полифилов.

useBuiltIns: ‘usage’

По умолчанию в @babel/preset-env будет передаваться useBuiltIns: 'usage' для автоматического определения необходимых полифилов, основываясь на том, какие возможности языка были использованы в исходном коде проекта. Это гарантирует, что в финальную сборку попадёт только минимально необходимое количество полифилов. Однако это также означает, что

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

Если одной из ваших зависимостей требуются полифилы, у вас есть несколько вариантов:

  1. Если зависимость написана в версии ES, которую не поддерживают целевые окружения: Добавьте эту зависимость в опцию transpileDependencies в файле vue. config.js. Это позволит использовать как синтаксические преобразования, так и определение полифилов для используемых возможностей для этой зависимости.

  2. Если зависимость предоставляет ES5 код и явно перечисляет необходимые полифилы:

    вы можете предварительно включить необходимые полифилы с помощью опции polyfills для @vue/babel-preset-app. Обратите внимание, что es.promise добавлен по умолчанию, так как он часто необходим для библиотек, основанных на Promise.

    // babel.config.js
    module.exports = {
      presets: [
        ['@vue/app', {
          polyfills: [
            'es.promise',
            'es.symbol'
          ]
        }]
      ]
    }
    

    Совет

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

  3. Если зависимость предоставляет ES5 код, но использует возможности ES6+ без явного перечисления необходимых полифилов (например, Vuetify): Используйте useBuiltIns: 'entry' и затем добавьте import 'core-js/stable'; import 'regenerator-runtime/runtime';

    в файл точки входа. Это будет импортировать ВСЕ полифилы на основе целей, перечисленных в browserslist, так что вам больше не нужно будет беспокоиться о полифилах для зависимостей, но это скорее всего увеличит размер финальной сборки некоторыми неиспользуемыми полифилами.

Подробнее можно изучить в документации @babel/preset-env.

Полифилы при сборке библиотеки или веб-компонентов

При использовании Vue CLI для сборки библиотеки или веб-компонентов рекомендуется указывать useBuiltIns: false для @vue/babel-preset-app, чтобы отключить автоматическое добавление полифилов. Это гарантирует, что вы не добавляете ненужные полифилы в свой код, потому что полифилами должно будет заниматься приложение, где они будут использоваться.

Современный режим

Благодаря Babel мы можем использовать все новейшие возможности языка ES2015+, но это также означает, что нам необходимо предоставлять транспилированную сборку с полифилами для поддержки старых браузеров. Эти транспилированные сборки зачастую больше в размере, чем оригинальный исходный код в ES2015+, а их парсинг и выполнение происходит медленнее. Учитывая, что сегодня у большинства современных браузеров есть прекрасная поддержка ES2015, становится пустой тратой необходимость предоставлять более тяжёлый и менее эффективный код для них лишь потому, что мы должны поддерживать старые версии браузеров.

Vue CLI предоставляет «Современный режим», чтобы помочь в решении этой проблемы. При сборке для production с помощью следующей команды:

vue-cli-service build --modern

Vue CLI будет собирать две версии вашего приложения: первая сборка для современных браузеров, которые поддерживают ES-модули, а вторая сборка для старых браузеров, которые не имеют такой поддержки.

Приятная часть заключается в том, что ничего специально делать при публикации не требуется. Сгенерированный HTML-файл автоматически использует технику, описанную в классном посте Филлипа Уолтона:

  • Современная сборка загружается с помощью <script type="module"> в браузерах, которые поддерживают модули; они также предзагружаются через <link rel="modulepreload">.

  • Сборка для старых браузеров загружается с помощью тега <script nomodule>, который игнорируется браузерами, поддерживающими ES-модули.

  • Исправление ошибки для <script nomodule> в Safari 10 также внедряется автоматически.

Для приложения Hello World современная сборка на 16% меньше. В production использование современной сборки приводит к значительному ускорению парсинга и исполнения кода, что повышает производительность загрузки приложения.

Совет

<script type="module"> загружаются всегда с помощью CORS. Это значит, что ваш сервер должен возвращать корректные заголовки CORS, такие как Access-Control-Allow-Origin: *. Если вы хотите загружать скрипты с помощью credentials, установите опцию crossorigin в значение use-credentials.

Кроме того, современный режим использует инлайновый скрипт для избежания загрузки обеих сборок в Safari 10, поэтому, если вы используете строгие политики CSP, необходимо явно разрешить инлайновый скрипт с помощью:

Content-Security-Policy: script-src 'self' 'sha256-4RS22DYeB7U14dra4KcQYxmwt5HkOInieXK1NUMBmQI='

Определение текущего режима в конфигурации

Иногда может потребоваться изменить конфигурацию webpack только сборки для старых браузеров или только сборки для современных браузеров.

Vue CLI использует две переменных окружения для определения этого:

  • VUE_CLI_MODERN_MODE: флаг, что сборка была запущена с флагом --modern
  • VUE_CLI_MODERN_BUILD: значение true будет, если текущая конфигурация для современной сборки. В противном случае это сборка для старых браузеров.

Важно: Переменные доступны только при вызове/после вызова функций chainWebpack() и configureWebpack(), (т.е. не напрямую в области видимости модуля vue.config.js). Это также означает, что они доступны в файле конфигурации postcss.

Предостережение: Настройка плагинов webpack

Некоторые плагины, такие как html-webpack-plugin

, preload-plugin и т.п., добавляются только в конфигурации для современного режима. Попытка использовать их опции в конфигурации для старых браузеров может привести к ошибке, так как этих плагинов не будет существовать.

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

javascript — Как определить версию браузера?

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

Вот код:

 при ошибке возобновить следующий
ua = lcase(Request.ServerVariables("HTTP_USER_AGENT"))
moz = instr(ua,"mozilla")
ffx = instr(ua,"firefox")
saf = instr(ua,"сафари")
crm = instr(ua,"хром")
макс = инстр(ua,"maxthon")
opr = instr(ua,"опера")
ie4 = instr(ua,"msie 4")
ie5 = instr(ua,"msie 5")
ie6 = instr(ua,"msie 6")
ie7 = instr(ua,"msie 7")
ie8 = instr(ua,"трезубец/4.0")
т.е.9= instr(ua,"трезубец/5.0")
если моз>0, то
    БраузерТип = "Мозилла"
    BrVer = mid(ua,moz+8,(instr(moz,ua," ")-(moz+8)))
конец, если
если fx>0, то
    БраузерТип = "FireFox"
    БрВер = середина(ua,ffx+8)
конец, если
если безопасность>0, то
    Тип браузера = "Сафари"
    BrVerPlass = instr(ua,"версия")
    БрВер = mid(ua,БрВерПласс+8,(instr(БрВерПласс,ua," ")-(БрВерПласс+8)))
конец, если
если crm>0, то
    Тип браузера = "Хром"
    БрВер = mid(ua,crm+7,(instr(crm,ua," ")-(crm+7)))
конец, если
если макс>0, то
    БраузерТип = "Макстон"
    БрВер = mid(ua,max+8,(instr(max,ua," ")-(max+8)))
конец, если
если опр>0, то
    БраузерТип = "Опера"
    BrVerPlass = instr(ua,"presto")
    БрВер = mid(ua,БрВерПласс+7,(instr(БрВерПласс,ua," ")-(БрВерПласс+7)))
конец, если
если ie4>0, то
    БраузерТип = "Интернет Эксплорер"
    БрВер = "4"
конец, если
если ie5>0, то
    БраузерТип = "Интернет Эксплорер"
    БрВер = "5"
конец, если
если ie6>0, то
    БраузерТип = "Интернет Эксплорер"
    БрВер = "6"
конец, если
если ie7>0, то
    БраузерТип = "Интернет Эксплорер"
    БрВер = "7"
конец, если
если ie8>0, то
    БраузерТип = "Интернет Эксплорер"
    БрВер = "8"
    если ie7>0, то BrVer = BrVer & "(в режиме совместимости с IE7)"
конец, если
если ie9>0 тогда
    БраузерТип = "Интернет Эксплорер"
    БрВер = "9"
    если ie7>0, то BrVer = BrVer & "(в режиме совместимости с IE7)"
    если ie8>0, то BrVer = BrVer & "(в режиме совместимости с IE8)"
конец, если
OSSel = mid(ua,instr(ua,"(")+1,(instr(ua,";")-instr(ua,"("))-1)
OSver = mid(ua,instr(ua,";")+1,(instr(ua,")")-instr(ua,";"))-1)
если BrowserType = "Internet Explorer", то
    OSStart = instr(ua,";")
    OSStart = instr(OSStart+1,ua,";")
    OSStopp = instr(OSStart+1,ua,";")
    OSsel = mid(ua,OSStart+2,(OSStopp-OSStart)-2)
конец, если
    Выберите случай
        чехол "виндовс нт 6. 1"
            ОС = "Виндовс"
            ОСвер = "7"
        чехол "виндовс нт 6.0"
            ОС = "Виндовс"
            ОСвер = "Виста"
        чехол "виндовс нт 5.2"
            ОС = "Виндовс"
            ОСвер = "Серв 2003/ХР х64"
        чехол "виндовс нт 5.1"
            ОС = "Виндовс"
            ОСвер = "ХР"
        случай еще
            ОС = OSSel
    Конец выбора
Response.write "
" & ua & "
" & BrowserType & "
" & BrVer & "
" & OS & "
" & OSver & "
" 'Используйте переменные здесь для всего, что вам нужно ........

Как определить браузер пользователя (Safari, Chrome, IE, Firefox и Opera) с помощью JavaScript?

       

     </code></p> <code>          </code> <code> Как обнаружить Safari, Chrome, IE, Firefox </code></p> <code>          </code> <code> и браузер Opera с использованием JavaScript? </code></p> <code>      </code> <code>

   

900 15

    

"color: green" >GeeksforGeeks

       

    

         9 0015 Как обнаружить Safari, Chrome, IE, Firefox

         и браузер Opera с использованием JavaScript?

    

       

    

         Нажмите кнопку, чтобы обнаружить

         текущий браузер    

       

    

         Safari?

         "output-safari" >

     9001 6

       

    

         Chrome?

         "output-chrome" >

    

       

    

9 0016

         Является ли Internet Explorer?

         "output-ie" >

    

       

    

         Firefox?

         "output-firefox" >

     9001 6

       

    

         Браузер Opera?

         "выход-опера" >