Обнаружение в браузере с помощью обнаружения объектов / функций - PullRequest
1 голос
/ 30 июня 2011

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

Я надеюсь выяснить, можно ли использовать функцию обнаружения функций, чтобы выяснить, что на самом деле представляет собой браузер. То есть, идентифицируя конкретные причуды, которые имеет пользовательский агент, и затем определяя, какой браузер имеет те же самые причуды. Например, если браузер не определяет XMLHttpRequest, но определяет ActiveXObject, тогда мы знаем, что это будет MSIE 6 или ниже.

Существует ли библиотека таких идентифицирующих причуд или список их, чтобы я мог написать свою собственную?

Edit: Я действительно не предоставил обоснование этого. Я хотел бы обновить систему, которая собирает статистику использования для веб-приложения. требует me для определения браузера и в настоящее время использует userAgent. Я ищу что-то более надежное.

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Теперь, когда вы выяснили, что вы действительно ищете (запись фактического типа браузера для статистического сбора, а не программирования веб-страниц), кажется, что стандартное поведение по умолчанию для всех браузеров содержитне обманчивый и уникально идентифицирующий пользовательский агент.Итак, для первого порядка вы должны убедиться, что понимаете, как правильно интерпретировать все это, поскольку это, вероятно, составляет 99% того, с чем вы сталкиваетесь.Google показывает кучу разных списков этих пользовательских агентов.Мне нравится столбец "браузер" этот .Вы можете довольно легко определить движок рендеринга и версию во многих браузерах (Gecko, Webkit, MSIE, Presto) и затем решить, насколько больше деталей вам нужно (например, Firefox или Camino) оттуда.Каждый браузер уникально идентифицирован из коробки.Вы можете запрограммировать в суббраузере столько уровня детализации, сколько у вас есть время.

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

Если вы просто хотите определить, какие браузеры лгут об их движке рендеринга (например, утверждая, что Gecko действительно MSIE), то это, вероятно, более простая проблема, поскольку вы можете обойтись меньшим количеством тестов функций(например, тот, который вы определили для IE6).Но это все еще высокий заказ.Если бы я делал это, я бы начал с набора проприетарных вещей, которые IE поддерживает в каждой основной версии, и протестировал бы их.Как правило, можно с уверенностью сказать, что никто другой не поддерживает большинство специфических для IE вещей, которые не могут быть стандартом.Тогда, я бы, наверное, искал некоторые специфические для Mozilla вещи в движке рендеринга Gecko.Прямо сейчас у каждого движка есть свои собственные CSS3-теги -moz, -o, -ms, -webkit, которые в значительной степени определяют, какой это движок рендеринга (для более поздних версий).В конечном итоге они исчезнут, когда эти стандарты будут доработаны, но большинство браузеров будут долго сохранять обратную совместимость с их вариантом (Microsoft, возможно, навсегда).

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

1 голос
/ 30 июня 2011

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

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

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

Тамэто огромные базы данных строк UA, которые можно использовать для анализа, например http://www.user -agents.org / .Просто отметьте, что у вас будет определенный уровень ошибок и вы не будете слишком сильно полагаться на статистику (user-agent.org перечисляет 24 строки UA с «mozilla» в них, большинство из которых не являются браузерами, есть 174 с MSIE вих).

1 голос
/ 30 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...