Как определить, с помощью какого браузера (IE, Firefox, Opera) пользователь обращается к моему сайту? Примеры на Javascript, PHP, ASP, Python, JSP и любых других, которые вы можете придумать, были бы полезны. Есть ли независимый от языка способ получить эту информацию?
ИМХО, вроде точный дубликат от stackoverflow.com/questions/100898/browser-detection
Фрэнк, примеры на этих языках были бы замечательными (особенно Javascript и PHP для меня), но я хотел знать, есть ли способ сделать это, не специфичный для какого-либо одного языка.
штуковина, спасибо за ссылку. Я сделал поиск, прежде чем спросить, и эта страница не появилась в результатах.





Если это для обработки запроса, посмотрите заголовок Пользователь-агент во входящем запросе.
ОБНОВЛЕНИЕ: если это для отчетов, настройте свой веб-сервер для регистрации User-Agent в журналах доступа, а затем запустите инструмент анализа журнала, например, AWStats.
ОБНОВЛЕНИЕ 2: FYI, это обычно (не всегда, обычно) - плохая идея изменить способ обработки запроса на основе User-Agent.
Я бы сказал, что это всегда плохая идея; просто иногда это единственное решение
Итак, как лучше всего обращаться с мобильными устройствами и планшетами на данный момент?
@Joe Я считаю, что рекомендуется использовать CSS Media Queries. Как обычно, у A List Apart есть соответствующая статья.
Посмотрите на Пользователь-агент, которые они отправляют. Обратите внимание, что вы можете отправлять любого агента, который хотите, так что это не на 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;
}
Вы сохранили «Браузер» для обратной совместимости с устаревшей системой? ;-)
Должен быть довольно старый скрипт, если есть Netscape :)
Вы можете использовать класс 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 за упоминание о том, что пользовательский агент небезопасно использовать без осторожности
На стороне клиента это можно сделать в 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 может сообщить вам о вашем текущем браузере.
Языковой агностик? Из этих примеров, я думаю, у вас есть ответ.