Определение браузера ‣ 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;».
Порекомендую вам не устанавливать ссылку на локальную версию этого скрипта, а установить ссылку на скрипт, расположенный на сервере «Опытов». Таким образом на вашей странице будет работать всегда самая последняя версия. Сделать это можно так:
<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 не сможет это определить.
Если одной из ваших зависимостей требуются полифилы, у вас есть несколько вариантов:
Если зависимость написана в версии ES, которую не поддерживают целевые окружения: Добавьте эту зависимость в опцию
transpileDependencies
в файлеvue. config.js
. Это позволит использовать как синтаксические преобразования, так и определение полифилов для используемых возможностей для этой зависимости.Если зависимость предоставляет ES5 код и явно перечисляет необходимые полифилы:
@vue/babel-preset-app
. Обратите внимание, чтоes.promise
добавлен по умолчанию, так как он часто необходим для библиотек, основанных на Promise.// babel.config.js module.exports = { presets: [ ['@vue/app', { polyfills: [ 'es.promise', 'es.symbol' ] }] ] }
Совет
Рекомендуется добавлять полифилы таким образом, а не напрямую импортировать их в коде, потому что полифилы перечисленные здесь, могут быть автоматически исключены, если целевым браузерам, указанным в
browserslist
, они не нужны.Если зависимость предоставляет 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?
Как обнаружить Safari, Chrome, IE, Firefox и браузер Opera с использованием JavaScript? 900 15 "color: green" >GeeksforGeeks 9 0015 Как обнаружить Safari, Chrome, IE, Firefox и браузер Opera с использованием JavaScript? Нажмите кнопку, чтобы обнаружить текущий браузер Safari? 9001 6 |