Как определить, какой браузер используется для доступа к моему сайту?

Как определить, с помощью какого браузера (IE, Firefox, Opera) пользователь обращается к моему сайту? Примеры на Javascript, PHP, ASP, Python, JSP и любых других, которые вы можете придумать, были бы полезны. Есть ли независимый от языка способ получить эту информацию?

Языковой агностик? Из этих примеров, я думаю, у вас есть ответ.

Frank Krueger 23.09.2008 18:21

ИМХО, вроде точный дубликат от stackoverflow.com/questions/100898/browser-detection

gizmo 23.09.2008 18:21

Фрэнк, примеры на этих языках были бы замечательными (особенно Javascript и PHP для меня), но я хотел знать, есть ли способ сделать это, не специфичный для какого-либо одного языка.

Bill the Lizard 23.09.2008 18:23

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

Bill the Lizard 23.09.2008 18:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
4
17 685
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Если это для обработки запроса, посмотрите заголовок Пользователь-агент во входящем запросе.

ОБНОВЛЕНИЕ: если это для отчетов, настройте свой веб-сервер для регистрации User-Agent в журналах доступа, а затем запустите инструмент анализа журнала, например, AWStats.

ОБНОВЛЕНИЕ 2: FYI, это обычно (не всегда, обычно) - плохая идея изменить способ обработки запроса на основе User-Agent.

Я бы сказал, что это всегда плохая идея; просто иногда это единственное решение

cori 23.09.2008 18:28

Итак, как лучше всего обращаться с мобильными устройствами и планшетами на данный момент?

Joseph Weissman 31.05.2011 09:08

@Joe Я считаю, что рекомендуется использовать CSS Media Queries. Как обычно, у A List Apart есть соответствующая статья.

Hank Gay 31.05.2011 19:33

Посмотрите на Пользователь-агент, которые они отправляют. Обратите внимание, что вы можете отправлять любого агента, который хотите, так что это не на 100% надежно, но большинство людей не меняют его, если для этого нет конкретной причины.

Это может зависеть от ваших настроек. С apache в Linux это записывается в журнал доступа / var / log / apache2 / access_log

Вы можете сделать это с помощью:
- глядя в журнал веб-сервера, OR
- просмотр поля User-Agent в HTML-запросе (который представляет собой простой текстовый поток) перед его обработкой.

Быстрый и грязный пример сервлета Java

private String getBrowserName(HttpServletRequest request) {
    // get the user Agent from request header
    String userAgent = request.getHeader(Constants.BROWSER_USER_AGENT);
    String BrowesrName = "";
    //check for Internet Explorer
    if (userAgent.indexOf("MSIE") > -1) {
        BrowesrName = Constants.BROWSER_NAME_IE;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_FIREFOX) > -1) {
        BrowesrName = Constants.BROWSER_NAME_MOZILLA_FIREFOX;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_OPERA) > -1) {
        BrowesrName = Constants.BROWSER_NAME_OPERA;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_SAFARI) > -1) {
        BrowesrName = Constants.BROWSER_NAME_SAFARI;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_NETSCAPE) > -1) {
        BrowesrName = Constants.BROWSER_NAME_NETSCAPE;
    } else {
        BrowesrName = "Undefined Browser";
    }
    //return the browser name
    return BrowesrName;
}

Вы сохранили «Браузер» для обратной совместимости с устаревшей системой? ;-)

Kirk Strauser 23.09.2008 18:36

Должен быть довольно старый скрипт, если есть Netscape :)

Yasen 25.07.2013 17:21

Вы можете использовать класс HttpBrowserCapabilities в ASP.NET. Вот образец из этого связь

private void Button1_Click(object sender, System.EventArgs e)
{
        HttpBrowserCapabilities bc;
        string s;
        bc = Request.Browser;
        s= "Browser Capabilities" + "\n";
        s += "Type = " + bc.Type + "\n";
        s += "Name = " + bc.Browser + "\n";
        s += "Version = " + bc.Version + "\n";
        s += "Major Version = " + bc.MajorVersion + "\n";
        s += "Minor Version = " + bc.MinorVersion + "\n";
        s += "Platform = " + bc.Platform + "\n";
        s += "Is Beta = " + bc.Beta + "\n";
        s += "Is Crawler = " + bc.Crawler + "\n";
        s += "Is AOL = " + bc.AOL + "\n";
        s += "Is Win16 = " + bc.Win16 + "\n";
        s += "Is Win32 = " + bc.Win32 + "\n";
        s += "Supports Frames = " + bc.Frames + "\n";
        s += "Supports Tables = " + bc.Tables + "\n";
        s += "Supports Cookies = " + bc.Cookies + "\n";
        s += "Supports VB Script = " + bc.VBScript + "\n";
        s += "Supports JavaScript = " + bc.JavaScript + "\n";
        s += "Supports Java Applets = " + bc.JavaApplets + "\n";
        s += "Supports ActiveX Controls = " + bc.ActiveXControls + "\n";
        TextBox1.Text = s;
}

Прежде всего, я хотел бы отметить, что лучше избегать установки исправлений для определенных веб-браузеров, если только в качестве последнего результата не попытаться достичь кросс-браузерной совместимости вместо использования стандартного HTML / CSS / JS (да, javascript имеет подмножество общего знаменателя, которое работает во всех основных браузерах).

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

Матч против этого:

содержит браузер

Firefox -> Firefox

MSIE -> Internet Explorer

Opera -> Opera (один из немногих браузеров, не выдающих себя за Mozilla :))

Большинство агентов, содержащих слова «бот» или «краулер», обычно являются ботами (поэтому вы можете не указывать их в журналах и т. д.).

Полный список строк пользовательского агента из различных браузеров

Список действительно большой :)

Предопределенный суперглобальный массив PHP $ _SERVER содержит ключ «HTTP_USER_AGENT», который содержит значение заголовка User-Agent, отправленное в HTTP-запросе. Помните, что это данные, предоставленные пользователем, и им нельзя доверять. Немногие пользователи изменяют свою строку пользовательского агента, но время от времени это происходит.

Большой +1 за упоминание о том, что пользовательский агент небезопасно использовать без осторожности

Shabbyrobe 26.08.2010 00:52

На стороне клиента это можно сделать в Javascript с помощью объекта navigation.userAgent. Вот грубый пример:

if (navigator.userAgent.indexOf("MSIE") > -1) 
{
    alert("Internet Explorer!");
}
else if (navigator.userAgent.indexOf("Firefox") > -1)
{
    alert("Firefox!");
}

A more detailed and comprehensive example can be found here: http://www.quirksmode.org/js/detect.html

Обратите внимание: если вы выполняете обнаружение браузера ради совместимости с Javascript, обычно лучше просто использовать обнаружение объектов или блок try / catch, чтобы какая-то версия, о которой вы не думали, проскользнула сквозь трещины вашего скрипта. Например, вместо этого ...

if (navigator.userAgent.indexOf("MSIE 6") > -1)
{
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
    objXMLHttp = new XMLHttpRequest();
}

...это лучше:

if (window.XMLHttpRequest) // Works in Firefox, Opera, and Safari, maybe latest IE?
{
    objXMLHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) // If the above fails, try the MSIE 6 method
{
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}

проверьте browsecap.ini. На связанном сайте есть файлы для нескольких языков сценариев. Browsecap не только идентифицирует пользовательского агента, но также содержит информацию о поддержке браузером CSS, поддержке JS, ОС, если это мобильный браузер и т. д.

перейдите к эта страница, чтобы увидеть пример того, какую информацию Browsecap.ini может сообщить вам о вашем текущем браузере.

Другие вопросы по теме