Вопрос по – Обнаружение браузера

10

Какой самый лучший / самый простой / самый точный способ обнаружить браузер пользователя?

Простота расширяемости и реализации является плюсом.

Чем меньше используемых технологий, тем лучше.

Решение может быть на стороне сервера, на стороне клиента или обоих. Однако результаты должны в конечном итоге оказаться на сервере.

Решение может быть независимым от структуры.

Решение будет использоваться только для целей отчетности.

Не совсем ответ, но вы можете прочитатьwebaim.org/blog/user-agent-string-history, Если ничего другого, это действительно смешно. dsm

Ваш Ответ

12   ответов
12

которую предоставляет браузер (что чревато проблемами, прочитайте оИстория строки UserAgent).

На клиенте (то есть в Javascript) у вас есть больше возможностей. Но лучший вариант - на самом деле не беспокоиться о том, какой это браузер. Просто убедитесь, что какая-либо функция, которую вы хотите использовать, действительно существует.

Например, вы можете использовать setCapture, которую предоставляет только MSIE:

if (element.setCapture) element.setCapture()

Вместо того, чтобы выяснить, что такое браузер, а затем оценить его возможности, мы просто проверяем, поддерживает ли он что-то перед его использованием - кто знает, какие браузеры будут поддерживать то, что в будущем, вы действительно хотите вернуться и обновить ваши сценарии, если Safari решит поддержать setCapture?

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

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

Я сделал следующее.

Я использую комбинацию JavaScript и PHP для записи статистики. JavaScript для определения, какой браузер и ОС (как этоprobably самый точный) и PHP для его записи:

JavaScript приходит изQuirksmodePHP довольно очевиден. Я используюMooTools JS Framework.

Добавьте следующее в скрипт BrowserDetect:

window.addEvent('domready', function() {
    if (BrowserDetect) {
        var q_data = 'ajax=true&browser=' + BrowserDetect.browser + '&version=' + BrowserDetect.version + '&os=' + BrowserDetect.OS;
        var query = 'record_browser.php'
        var req = new Request.JSON({url: query, onComplete: setSelectWithJSON, data: q_data}).post();
    }
});

Это определяет браузер, версию браузера и ОС браузера пользователя и отправляет его вrecord_browser.php скрипт.record_browser.php скрипт просто добавляет информацию вместе с PHPsession_id и текущийuser_id, если представить.

MySQL Table:

CREATE TABLE `browser_detects` (
  `id` int(11) NOT NULL auto_increment,
  `session` varchar(255) NOT NULL default '',
  `user_id` int(11) NOT NULL default '0',
  `browser` varchar(255) NOT NULL default '',
  `version` varchar(255) NOT NULL default '',
  `os` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `sessionUnique` (`session`)
)

PHP-код:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $session = session_id();
    $user_id = isset($user_id) ? $user_id ? 0;
    $browser = isset($_POST['browser']) ? $_POST['browser'] ? '';
    $version = isset($_POST['version']) ? $_POST['version'] ? '';
    $os = isset($_POST['os']) ? $_POST['os'] ? '';
    $q = $conn->prepare('INSERT INTO browser_detects (`session`, `user`, `browser`, `version`, `os`) VALUES (:session :user, :browser, :version, :os)');
    $q->execute(array(
                    ':session' => $session,
                    ':user' => $user_id,
                    ':browser' => $browser,
                    ':version' => $version,
                    ':os' => $os
                ));
}
-1

синтаксис:

<!--[if lte IE 6]><link href="/style.css" rel="stylesheet" type="text/css" /><![endif]-->

Это относится к IE 6 или более ранней версии. Вы можете изменить версию IE, а также иметь:

<!--[if eq IE 7]> = Equal too IE 7
<!--[if gt IE 6]> = Greater than IE 6

Я не уверен, что это работает с другими частями страницы, но работает, когда находится внутри<head> тег. Видеть этопример для дополнительной информации

Error: User Rate Limit Exceededquirksmode.org/css/condcom.html).ThisError: User Rate Limit Exceededmsdn.microsoft.com/en-us/library/ms537512%28v=VS.85%29.aspxError: User Rate Limit Exceeded"Important As of Internet Explorer 10, conditional comments are no longer supported by standards mode. Use feature detection to provide effective fallback strategies for website features that aren't supported by the browser. For more info about standards mode, see Defining Document Compatibility."
1

и он все еще находится в моем буфере вставки, я просто перепостую. Примечание: это решение PHP на стороне сервера

В настоящее время я использую следующий код для этого. Это не почти утомительное решение, но должно быть легко реализовать больше браузеров. Я не знал оuser-agents.org (спасибо PConroy), "на днях" Я проверю это и посмотрю, смогу ли я обновить и добавить в свой список.

define("BROWSER_OPERA","Opera");
define("BROWSER_IE","IE");
define("BROWSER_OMNIWEB","Omniweb");
define("BROWSER_KONQUEROR","Konqueror");
define("BROWSER_SAFARI","Safari");
define("BROWSER_MOZILLA","Mozilla");
define("BROWSER_OTHER","other");

$aBrowsers = array
(
  array("regexp" => "@Opera(/| )([0-9].[0-9]{1,2})@", "browser" => BROWSER_OPERA, "index" => 2),
  array("regexp" => "@MSIE ([0-9].[0-9]{1,2})@", "browser" => BROWSER_IE, "index" => 1),
  array("regexp" => "@OmniWeb/([0-9].[0-9]{1,2})@", "browser" => BROWSER_OMNIWEB, "index" => 1),
  array("regexp" => "@(Konqueror/)(.*)(;)@", "browser" => BROWSER_KONQUEROR, "index" => 2),
  array("regexp" => "@Safari/([0-9]*)@", "browser" => BROWSER_SAFARI, "index" => 1),
  array("regexp" => "@Mozilla/([0-9].[0-9]{1,2})@", "browser" => BROWSER_MOZILLA, "index" => 1)
);

foreach($aBrowsers as $aBrowser)
{
  if (preg_match($aBrowser["regexp"], $_SERVER["HTTP_USER_AGENT"], $aBrowserVersion))
  {
    define("BROWSER_AGENT",$aBrowser["browser"]);
    define("BROWSER_VERSION",$aBrowserVersion[$aBrowser["index"]]);
    break;
  }
}
Error: User Rate Limit Exceeded Jrgns
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededOpera/10.00 (Windows NT 5.2; U; en) Presto/2.2.2
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Jrgns
0

EditРешение, приведенное ниже, не рекомендуется. Попробуйте это вместо:http://whichbrowser.net/

Когда-то это работало для меня, но, глядя на код сейчас, я понятия не имею, как. Используйте вместо этого выше: - /

<script type="text/javascript">
    // <![CDATA[
    var BrowserCheck = Class.create({
        initialize: function () {
            var userAgent = navigator.userAgent.toLowerCase();
            this.version = (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1];
            this.safari = /webkit/.test(userAgent) && !/chrome/.test(userAgent);
            this.opera = /opera/.test(userAgent);
            this.msie = /msie/.test(userAgent) && !/opera/.test(userAgent);
            this.mozilla = /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent);
            this.chrome = /chrome/.test(userAgent);
        }
    });    
    // ]]>
</script>

Не забывайте, что вам нужно инициализировать его, чтобы использовать его, поэтому поместите это в свой код:

var UserBrowser = new BrowserCheck();

Затем проверьте тип и версию браузера следующим образом: (например, Internet Explorer 8)

if ((UserBrowser.msie == true) && (UserBrowser.version == 8))

и т.п.

Надеюсь, что он сделает эту работу для вас так же, как для нас, но помните, что никакое обнаружение в браузере не является пуленепробиваемым!

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededwhichbrowser.netError: User Rate Limit Exceeded
Error: User Rate Limit Exceededwhichbrowser.net
6

JQuery Browser Plugin сделает это на стороне клиента для вас.

What is the jQuery Browser Plugin?

The jQuery Browser Plugin is an addon for jQuery that makes it easy to uniquely identify your visitors' browsers.

What does it do?

It gives you an object in javascript that contains all of the information about the browser being used. It also adds CSS browser selectors, which means you can style elements or write functions for specific browsers, browser versions, layouts, layout versions, and even operating systems. Image of the jQuery Browser Plugin in action.

Плагин делает$.browser доступны, которые вы можете повторно отправить на ваш сервер с помощью вызова AJAX, если вам действительно это нужно на стороне сервера.

alert($.browser.name);  // Alerts Firefox for me

Однако плагин будет работать так же эффективно, как браузеры, с которыми он был протестирован. Плагин, указанный выше, имеет списокбраузеры, распознаваемые в его тестах, но всегда есть риск, что новый браузер выйдет из-под контроля (Гугл Хром..), что потребует переписывания правил распознавания. Тем не менее, этот плагин, кажется, регулярно обновляется.

Error: User Rate Limit Exceeded
0

Для обнаружения браузера на стороне сервера PHP я рекомендую определение браузера Harald Hope:

http://techpatterns.com/downloads/php_browser_detection.php

Опубликовано под лицензией GPL.

-1

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

2

Don't use browser detection

Напишите код, который тестирует себя для конкретных случаев, представленных браузерами, в противном случае вы просто будете писать код для очень очень небольшой группы пользователей. Лучше использовать"typeof foo == 'undefined'" и браузерные приемы, где они вам нужны.

JQuery делает это по всей своей кодовой базе (если вы посмотрите на код, вы увидите, что он реализует поведение для различных технологий браузера)

Это лучше в долгосрочной перспективе.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Browser detection is not 100% reliable at the best of times, but things get worse than this: There are lots of variants of browsers (MSIE customisations etc) Browsers can lie about their identity (Opera actually has this feature built-in) Gateways hide or obfuscate the browser's identity Customisation and gateway vendors write their own rubbish in the USER_AGENT

Лучше обнаруживать функции в клиентском скрипте. Надеюсь, вам нужно только обнаружение браузера, чтобы обойти ошибку в определенном браузере и версии.

Error: User Rate Limit Exceeded
0

обнаружение в браузере может пойти не так ... однако в интересах Code Golf.

Это очень быстрый способ обнаружения IE.

<script>
  if('\v'=='v'){
    alert('I am IE');
  } else {
    alert('NOT IE');
  }
</script>

На самом деле это довольно аккуратно, потому что он выбирает IE, не запуская Opera.

Бонусные баллы, если вы знаетеwhy это работает в IE. ;-)

0

StringBuilder strb = new StringBuilder();
strb.AppendFormat ( "User Agent: {0}{1}", Request.ServerVariables["http_user_agent"].ToString(), Environment.NewLine );
strb.AppendFormat ( "Browser: {0}{1}", Request.Browser.Browser.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Version: {0}{1}", Request.Browser.Version.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Major Version: {0}{1}", Request.Browser.MajorVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Minor Version: {0}{1}", Request.Browser.MinorVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Platform: {0}{1}", Request.Browser.Platform.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "ECMA Script version: {0}{1}", Request.Browser.EcmaScriptVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Type: {0}{1}", Request.Browser.Type.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "-------------------------------------------------------------------------------{0}",  Environment.NewLine );
strb.AppendFormat ( "ActiveX Controls: {0}{1}", Request.Browser.ActiveXControls.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Background Sounds: {0}{1}", Request.Browser.BackgroundSounds.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "AOL: {0}{1}", Request.Browser.AOL.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Beta: {0}{1}", Request.Browser.Beta.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "CDF: {0}{1}", Request.Browser.CDF.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "ClrVersion: {0}{1}", Request.Browser.ClrVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Cookies: {0}{1}", Request.Browser.Cookies.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Crawler: {0}{1}", Request.Browser.Crawler.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Frames: {0}{1}", Request.Browser.Frames.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Tables: {0}{1}", Request.Browser.Tables.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "JavaApplets: {0}{1}", Request.Browser.JavaApplets.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "JavaScript: {0}{1}", Request.Browser.JavaScript.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "MSDomVersion: {0}{1}", Request.Browser.MSDomVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "TagWriter: {0}{1}", Request.Browser.TagWriter.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "VBScript: {0}{1}", Request.Browser.VBScript.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "W3CDomVersion: {0}{1}", Request.Browser.W3CDomVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Win16: {0}{1}", Request.Browser.Win16.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Win32: {0}{1}", Request.Browser.Win32.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "-------------------------------------------------------------------------------{0}", Environment.NewLine );
strb.AppendFormat ( "MachineName: {0}{1}", Environment.MachineName, Environment.NewLine );
strb.AppendFormat ( "OSVersion: {0}{1}", Environment.OSVersion, Environment.NewLine );
strb.AppendFormat ( "ProcessorCount: {0}{1}", Environment.ProcessorCount, Environment.NewLine );
strb.AppendFormat ( "UserName: {0}{1}", Environment.UserName, Environment.NewLine );
strb.AppendFormat ( "Version: {0}{1}", Environment.Version, Environment.NewLine );
strb.AppendFormat ( "UserInteractive: {0}{1}", Environment.UserInteractive, Environment.NewLine );
strb.AppendFormat ( "UserDomainName: {0}{1}", Environment.UserDomainName, Environment.NewLine );

Похожие вопросы