Js как определить браузер сафари

Обновлено: 30.06.2024

У меня есть 5 аддонов / расширений для FF, Chrome, IE, Opera и Safari.

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

анализ надежности

  • Internet Explorer: JScript-это условная компиляция (до IE9) и document.documentMode .
  • Edge: в браузерах Trident и Edge реализация Microsoft предоставляет StyleMedia конструктор. Исключая трезубец оставляет нас с краем.
  • Firefox: API Firefox для установки дополнений: InstallTrigger
  • Chrome: The global chrome объект, содержащий несколько свойств, включая документированный chrome.webstore объект.
  • Safari: уникальный шаблон именования в его именовании конструкторов. Это наименее долговечный способ из всех перечисленных свойств и угадайте, что? В Safari 9.1.3 это было исправлено. Поэтому мы проверяем против SafariRemoteNotification , который был введен после версии 7.1, чтобы покрыть все сафари от 3.0 и выше.
  • Опера: window.opera существует уже много лет, но будут удалены когда Opera заменяет свой двигатель на Blink + V8 (используется Chromium).
    • обновление 1: Опера 15 была выпущена, его строка UA выглядит как Chrome, но с добавлением "OPR". В этой версии chrome объект определен (но chrome.webstore нет). Поскольку Opera пытается клонировать Chrome, я использую для этой цели User agent sniffing.
    • обновление 2: !!window.opr && opr.addons может использоваться для обнаружения Opera 20+ (вечнозеленые).

    успешно протестирован в:

    вы можете попробовать следующий способ, чтобы проверить версию браузера.

    и если вам нужно знать только версию браузера IE, то вы можете следовать ниже кода. Этот код хорошо работает для версии IE6 до IE11

    Я знаю, что это может быть излишним, чтобы использовать lib для этого, но просто, чтобы обогатить теме, вы можете проверить есть.js способ сделать это:

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

    вот скорректированная версия ответа Роба на 2016 год, включая Microsoft Edge и обнаружение Blink:

    ( edit: я обновил ответ Роба выше с этой информацией.)

    красота этого подхода заключается в том, что он опирается на свойства движка браузера, поэтому он охватывает даже производные браузеры, такие как Яндекс или Вивальди, которые практически совместимы с основными браузерами, чьи движки они используют. Исключение составляет Opera, которая полагается на нюхание пользовательского агента, но сегодня (т. е. ver. 15 и выше) даже опера сама по себе только оболочка для моргания.

    спасибо всем. Я протестировал фрагменты кода здесь на последних браузерах: Chrome 55, Firefox 50, IE 11 и Edge 38, и я придумал следующую комбинацию, которая работала для меня для всех из них. Я уверен, что это может быть улучшено, но это быстрое решение для тех, кто нуждается:

    Он добавляет класс CSS в HTML, с именем браузера.

    вот несколько известных библиотек, которые обрабатывают обнаружения браузера.

    Баузер по lancedikson-2,713★s-последнее обновление 12 марта 2018 года-2,9 КБ

    .js по bestiejs-1912★s-последнее обновление 23 января 2018 года-5,9 КБ

    обнаружить.js by darcyclarke-501★s-последнее обновление 26 октября 2015 г. - 2.9 КБ

    jQuery Browser по gabceb-485★s-последнее обновление 23 ноября 2015 года-1.3 КБ

    обнаружение браузера (архив) по QuirksMode-последнее обновление 14 ноября 2013 года-884B

    Заметных Упоминаний:

    • WhichBrowser - 1,230★s-последний обновлено 5 февраля 2018 года
    • Modernizr - 22,320★s-последнее обновление 4 марта 2018 года-чтобы победить мертвую лошадь, обнаружение функций должно управлять любым canIuse вопросы стиля. Обнаружение браузера действительно только для тонкостей.

    Более Дальнеишее Чтение

    Если вам нужно знать, что такое числовая версия какого-либо конкретного браузера, вы можете использовать следующий фрагмент кода. В настоящее время он расскажет вам версию Chrome/Chromium/Firefox:

    этой сочетает в себе оригинальный ответ Роба и обновление плова на 2016 год

    здесь вы узнаете, какой браузер он работает.

    UAParser является одним из облегченной библиотеки JavaScript для идентификации браузера, движка, ОС, процессора и типа/модели устройства из строки userAgent.

    есть CDN доступны. Здесь я включил пример кода для обнаружения браузера с помощью UAParser.

    теперь вы можете использовать значение result.browser условно запрограммировать вашу страницу.

    Источник Урока: как определить браузер, двигатель, ОС, процессор и устройство с помощью JavaScript?

    простая, одна строка кода JavaScript даст вам имя браузера:

    Как определить браузер Safari с помощью JavaScript? Я пробовал код ниже, и он обнаруживает не только Safari, но и браузер Chrome.

    вы можете легко использовать индекс Chrome для фильтрации Chrome:

    в крайнем случае, обнаружение Safari с помощью этого регулярного выражения:

    Он использует отрицательный взгляд-вокруг и он исключает Chrome, Edge и все браузеры Android, которые включают Safari имя в их агенте пользователя.

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

    Если вы все еще хотите сделать это и протестировать любую версию Safari, я бы предложил использовать это

    Это будет работать с любой версией Safari на всех устройствах: Mac, iPhone, iPod, устройство iPad.

    редактировать

    Изменить 2

    Обновлено в соответствии с Chrome docs для правильного обнаружения Chrome на iOS

    стоит отметить, что все браузеры на iOS-это просто обертки для Safari и используют один и тот же движок. См. bfred.это комментарий к его собственному ответу в этой теме.

    редактировать 3

    Обновление ПО Firefox docs для правильного обнаружения Firefox на iOS

    этот код используется для обнаружения только браузера safari

    поскольку userAgent для chrome и safari почти одинаковы, может быть проще посмотреть на поставщика браузера

    сафари

    Chrome

    в Firefox (почему он пустой?)

    IE (почему это не определено?)

    только сафари whitout Chrome:

    после попытки других кодов я не нашел никаких, которые работают с новыми и старыми версиями Safari.

    наконец, я сделал этот код, который работает очень хорошо для меня:

    Я использую этот

    изменено регулярное выражение для ответа выше

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

    эта уникальная "проблема" - это 100% знак того, что браузер Safari (верьте или нет).

    это означает, что дескриптор объекта cookie имеет значение false в Safari, а все остальные-true, что на самом деле дает мне головную боль в другом проекте. Удачи в кодировании!

    может быть, это работает :

    EDIT: БОЛЬШЕ НЕ РАБОТАЕТ

    Я заметил, что только одно слово отличает Safari - "версия". Таким образом, это регулярное выражение будет работать идеально:

    Я не знаю, почему OP хотел обнаружить Safari, но в редком случае вам нужно обнюхивать браузер в настоящее время, вероятно, более важно обнаружить движок рендеринга, чем имя браузера. Например, в iOS все браузеры используют движок Safari/Webkit, поэтому бессмысленно получать "chrome" или "firefox" в качестве имени браузера, если базовый рендеринг на самом деле Safari/Webkit. Я не тестировал этот код со старыми браузерами, но он работает со всем довольно недавним на Android, iOS, OS X, Windows и Linux.

    Я пытаюсь определить браузер Chrome и Safari, используя jquery или javascript. Я думал, что мы не должны использовать jQuery.browser. Есть ли какие-либо предложения здесь? Большое спасибо!

    Если вы не хотите использовать $.browser , взгляните на case 1 , в противном случае, возможно, case 2 и 3 помогут вам просто чтобы получить информацию , потому что не рекомендуется использовать $.browser (при этом пользовательский агент может быть подделан). Альтернативой может быть использование jQuery.support , которое будет определять поддержку функций, а не информацию об агенте.

    Если вы настаиваете на том, чтобы получить браузер типа (только Chrome или Safari) , но не используете $.browser , case 1 - это то, что вы ищете .

    Это соответствует вашему требованию:

    Случай 1: (без jQuery и $ .browser, только javascript)

    Эти случаи я использовал раньше и работал хорошо, но они не рекомендуются .

    Случай 2: (используя jQuery и $ .browser, это сложно)

    Случай 3: (с использованием jQuery и $ .browser, «элегантное» решение)

    Chrome 80 только что выпущен и поставляется с одной удивительной функцией navigator.getUserAgent() , основанной на обещаниях и возвращающей объект с реквизитом, теперь нет необходимости использовать Regex для обнаружения браузеров на основе хрома

    Примечание 📝: убедитесь, что ваш Chrome v.80 + .

    JQuery обеспечивает что:

    Обновить

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

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

    Программно, вы остаетесь с бэкэндом на стороне сервера или клиентом на стороне клиента.

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

    В то время как мы приближаемся к тому дню, когда каждый веб-кодер будет в какой-то степени зависеть от Javascript (или нет), сегодня предположить, что у каждого пользователя включен javascript, будет ошибка QA проектирования и разработки продукта.

    Я слишком часто видел сайты, которые заканчивали с пустой страницы или сайт ломался, потому что предполагалось, что у каждого пользователя включен javascript. Нет. В целях безопасности у них может быть изначально отключен Javascript, и некоторые браузеры, такие как Chrome, позволят пользователю вносить белый список веб-сайтов в зависимости от домена. Edge - единственный из известных мне браузеров, в котором Microsoft приняла решение полностью отключить возможность пользователя отключать Javascript. Edge не предлагает концепцию белого списка, поэтому я не пользуюсь ею лично.

    Использование тега - это простой способ сообщить пользователю, что ваш сайт не будет работать без Javascript. После того как пользователь включит его и обновит / перезагрузит страницу, DOM теперь доступен для использования методов, указанных в ответах потоков, для обнаружения chrome vs safari.

    По иронии судьбы, я попал сюда, потому что я обновлял по платформам и Google тот же основной вопрос; хром против сарафи. Я не знал, что Chrome создает объект DOM с именем «chrome», который действительно является всем, что вам нужно для обнаружения «chrome» по сравнению со всем остальным.

    Var isChrome = typeof (chrome) === "объект";

    Если это правда, у вас есть Chrome, если ложь, у вас есть другой браузер.

    Проверьте, не создает ли Safari и собственный объект DOM, если да, получите имя объекта и сделайте то же самое, например:

    Var isSafari = (typeof (safari) === "объект");

    Надеюсь, что эти советы помогут.

    Я пытаюсь определить браузер Chrome и Safari, используя jquery или javascript.

    Я думал, что мы не должны использовать jQuery.browser.

    Это потому, что обнаружение браузеров - плохая идея. Это все еще лучший способ обнаружить браузер (когда задействован jQuery), если вы действительно намерены это сделать.

    Есть еще причуды и несоответствия в 2019 году.

    Например, с масштабированными событиями SVG и указателя между браузерами.

    Вот альтернатива , путем тестирования с помощью javascript, если поддерживается правило css, через собственный API поддержки CSS. Может развиваться, быть адаптированным!

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

    Остерегайтесь не использовать его в циклах, для производительности лучше заполнить константу при нагрузке:

    Как обнаружить браузер Safari с помощью JavaScript? Я попробовал код ниже, и он обнаруживает не только Safari, но и браузер Chrome.

    Вы можете легко использовать индекс Chrome для фильтрации Chrome:

    Я знаю, что этот вопрос старый, но я все равно решил опубликовать ответ, так как он может кому-то помочь. В некоторых крайних случаях вышеприведенные решения не дали результата, поэтому нам пришлось реализовать его таким образом, чтобы обрабатывать iOS, Desktop и другие платформы отдельно.

    Этот код используется для обнаружения только браузера Safari

    Изменено регулярное выражение для ответа выше

    Поскольку userAgent для chrome и safari практически одинаков, взглянуть на поставщика браузера проще.

    FireFox (почему он пуст?)

    IE (почему он не определен?)

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

    Если вы все еще хотите сделать это и протестировать любую версию Safari, я бы предложил использовать эту

    Это будет работать с любой версией Safari на всех устройствах: Mac, iPhone, iPod, iPad.

    Редактировать

    Редактировать 2

    Обновлен в соответствии с Документами Chrome для правильного определения Chrome на iOS

    Стоит отметить, что все браузеры на iOS являются просто обертками для Safari и используют один и тот же движок. Смотрите комментарий bfred.it к его собственному ответу в этой теме.

    Редактировать 3

    Обновлен в соответствии с документами Firefox для обнаружения Firefox на iOS правильно

    Что касается записей, самый безопасный способ, который я нашел, это реализовать часть кода обнаружения браузером Safari из этого ответа. :

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

    Я использую это

    Может это сработает:

    РЕДАКТИРОВАТЬ: НЕ Дольше работать

    Эта уникальная «проблема» является 100% признаком того, что браузер Safari (верите или нет).

    Это означает, что дескриптор объекта cookie установлен на false в Safari, в то время как для всех остальных - true, что фактически вызывает головную боль в другом проекте. Удачного кодирования!

    Я не знаю, почему ОП захотел обнаружить Safari, но в редких случаях вам нужно теперь перехватывать браузер, вероятно, гораздо важнее обнаружить механизм рендеринга, чем имя браузера. Например, в iOS все браузеры используют движок Safari / Webkit, поэтому бессмысленно указывать в качестве имени браузера «chrome» или «firefox», если в качестве базового средства визуализации используется Safari / Webkit. Я не тестировал этот код со старыми браузерами, но он работает со всем относительно недавним на Android, iOS, OS X, Windows и Linux.

    • Все браузеры под iOS будут отмечены как "safari / webkit"
    • Все браузеры под Android, кроме Firefox, будут отображаться как «chrome / blink»
    • Chrome, Opera, Blisk, Vivaldi и т. Д. Будут сообщаться как «chrome / blink» в Windows, OS X или Linux

    Я заметил, что только одно слово отличает Safari - «Версия». Так что это регулярное выражение будет работать идеально:

    Читайте также: