Как обнаружить браузер Safari с помощью JavaScript? Я попробовал код ниже, и он обнаруживает не только Safari, но и браузер Chrome.
function IsSafari() {
var is_safari = navigator.userAgent.toLowerCase().indexOf('safari/') > -1;
return is_safari;
}
Ответы:
Вы можете легко использовать индекс Chrome для фильтрации Chrome:
источник
Примечание: всегда пытайтесь определить конкретное поведение, которое вы пытаетесь исправить, вместо того, чтобы указывать его
isSafari?
В крайнем случае, найдите Safari с помощью этого регулярного выражения:
Он использует негативные осмотры и исключает Chrome, Edge и все браузеры Android, которые включают
Safari
имя в свой пользовательский агент.источник
Как уже отмечали другие люди, обнаружение функции предпочтительнее, чем проверка конкретного браузера. Одна из причин заключается в том, что строка пользовательского агента может быть изменена. Другая причина в том, что строка может измениться и сломать ваш код в более новых версиях.
Если вы все еще хотите сделать это и протестировать любую версию Safari, я бы предложил использовать эту
Это будет работать с любой версией Safari на всех устройствах: Mac, iPhone, iPod, iPad.
редактировать
Чтобы проверить в вашем текущем браузере: https://jsfiddle.net/j5hgcbm2/
Редактировать 2
Обновлен в соответствии с документами Chrome для корректного определения Chrome на iOS
Стоит отметить, что все браузеры на iOS являются просто обертками для Safari и используют один и тот же движок. См. Комментарий bfred.it к его собственному ответу в этой теме.
Редактировать 3
Обновлен в соответствии с документацией Firefox для правильного определения Firefox на iOS
источник
isSafari
будетtrue
в браузере Safari,false
иначе. Вы можете просто использовать приведенный выше фрагмент, а затем использовать свой почти так, как вы его опубликовали.if (isSafari) { do_this(); } else { do_that(); }
,&& !navigator.userAgent.match('FxiOS')
аналогичные проверки Chrome - ref ( developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/… )Просто используйте:
источник
getUserMedia
.Этот код используется для обнаружения только браузера Safari
источник
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36 OPR/24.0.1558.51 (Edition Next)
или Stock Android-браузер:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24
Поскольку userAgent для Chrome и Safari практически одинаковы, взглянуть на поставщика браузера проще.
Сафари
Хром
FireFox (почему он пуст?)
IE (почему он не определен?)
источник
Только сафари без хрома:
Попробовав другие коды, я не нашел ни одной, которая бы работала с новыми и старыми версиями Safari.
Наконец, я сделал этот код, который очень хорошо работает для меня:
источник
Я заметил, что только одно слово отличает Safari - «Версия». Так что это регулярное выражение будет работать идеально:
источник
Я не знаю, почему ОП захотел обнаружить Safari, но в редких случаях вам нужно теперь прослушивать браузер, вероятно, гораздо важнее обнаружить механизм рендеринга, чем имя браузера. Например, в iOS все браузеры используют движок Safari / Webkit, поэтому бессмысленно указывать в качестве имени браузера «chrome» или «firefox», если в качестве базового средства визуализации используется Safari / Webkit. Я не тестировал этот код со старыми браузерами, но он работает со всем относительно недавним на Android, iOS, OS X, Windows и Linux.
Чтобы уточнить:
источник
Я использую это
источник
Самый простой ответ:
источник
navigator.vendor.toLowerCase().indexOf('apple') > -1
if (navigator.vendor.match(/apple/i)) { ... }
.Для записей самый безопасный способ, который я нашел, это реализовать часть Safari кода обнаружения браузера из этого ответа :
Конечно, лучшим способом решения проблем, связанных с браузером, всегда является обнаружение функций, если это вообще возможно. Однако использование кода, подобного приведенному выше, все же лучше, чем определение строки агента.
источник
Я знаю, что этот вопрос старый, но я все равно решил опубликовать ответ, так как он может кому-то помочь. В некоторых крайних случаях вышеприведенные решения не дали результата, поэтому нам пришлось реализовать его таким образом, чтобы обрабатывать iOS, Desktop и другие платформы отдельно.
источник
Модифицированный регулярное выражение для ответа выше
источник
Эта уникальная «проблема» является 100% признаком того, что браузер Safari (верите или нет).
Это означает, что дескриптор объекта cookie установлен в false в Safari, а для всех остальных - true, что фактически вызывает головную боль в другом проекте. Удачного кодирования!
источник
Может быть, это работает:
РЕДАКТИРОВАТЬ: НЕ Дольше работать
источник
Я создаю функцию, которая возвращает логический тип:
источник
Нюхание агента пользователя действительно сложно и ненадежно. Мы пытались обнаружить Safari на iOS с помощью чего-то вроде ответа @ qingu выше, он работал довольно хорошо для Safari, Chrome и Firefox. Но он ошибочно определил Opera и Edge как Safari.
Итак, мы пошли с обнаружением функций, как это выглядит на сегодняшний день,
serviceWorker
поддерживается только в Safari, а не в любом другом браузере на iOS. Как указано в https://jakearchibald.github.io/isserviceworkerready/Итак, мы сделали что-то вроде
Примечание : не тестировалось в Safari на MacOS.
источник