Jquery как определить браузер сафари
Я пытаюсь определить браузер 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, разделенных точкой с запятой, для лучшего обнаружения.
Остерегайтесь не использовать его в циклах, для производительности лучше заполнить константу при нагрузке:
I have a piece of JavaScript that dynamically creates an A tag inside of an existing div and then calls the jQuery function "click" on it. This works as intended in all browsers except Safari.
Safari returns the following error:
'undefined' is not a function (evaluating '$('.shell a')[0].click()')
Any ideas on what I'm doing wrong or why this doesn't work in Safari and how to get it to work (or one piece of code that works in all browsers) I've tried using .trigger("click") as well and it gives the same error.
and in the HTML:
The reason I'm doing it this weird way is the function is called from a Flash site to open a twitter window where I am giving a reward for tweeting. This so far has been the only way I could get the "tweet" event to bind to the window. If I open the window any other way (window.open for example) it doesn't capture the bound event that lets me know they actually completed the tweet.
The flow is something like:
- User clicks tweet button in flash
- Flash calls javascript function to dynamically write href and "click" it
- Twitter window opens
- User successfully tweets
- Tweet event is captured and updates flash with success
- Content is unlocked in flash
4 Answers 4
18.9k 9 9 gold badges 67 67 silver badges 101 101 bronze badges I was doing the same thing only using "HTMLEvents", the MouseEvents seems to be the difference. initMouseEvent apparently wants more parameters in Firefox This answer worked at the time, but initMouseEvent is deprecated.Trevor Dixon's answer does fix Safari, but breaks in even the latest Firefox:
TypeError: Not enough arguments to MouseEvent.initMouseEvent
The best way to support Safari—without breaking Firefox—would be using initEvent instead of initMouseEvent like so:
To update for 2016, MouseEvent should be used instead of initMouseEvent which is deprecated:
34.2k 9 9 gold badges 94 94 silver badges 100 100 bronze badges$('.shell a')[0] gets a DOM object out of the jQuery object. That DOM object only has DOM methods (not jQuery methods) and there is no industry standard .click() method on an <a> element until HTML5 and it is not yet implemented in every browser - thus you will see incomplete implementation across difference browsers.
You have a couple choices. The first option gets a jQuery object and uses the .click() method on the jQuery object. This will only work reliably if you are triggering jQuery click handlers, not if you just want the default click for the <a> tag.
Как определить браузер 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.
Как обнаружить браузер 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 - «Версия». Так что это регулярное выражение будет работать идеально:
Читайте также: