Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение браузера пользователя. старо как Мир 
:(
    Опции темы
Alexzander
Дата 10.7.2005, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 25.6.2005

Репутация: нет
Всего: нет



Для этого есть много модулей... тот же LWP, но в некотором плане они слишком "мощные". Хочется написать свою "универсальную" функцию, чтобы, например, записывать в лог типы браузеров.
Строки 'HTTP_USER_AGENT' различных типов браузеров можно посмотреть здесь http://www.zytrax.com/tech/web/browser_ids.htm

Вот что у меня получилось:
Код

sub GetUserAgent
{ 
  # спасибо Lee Semel - HTTP::BrowserDetect 
  #
  my $user_agent = lc($ENV{'HTTP_USER_AGENT'});
  my( $browser, $version );
  # проверка для MSIE
  if( index($user_agent,"compatible;") != -1 && 
     index($user_agent,"webtv") == -1 &&
     index($user_agent,"opera") == -1 &&
     index($user_agent,"msie") != -1)  
  {
    # похоже это MS IE
    ($version) = ($user_agent =~ / 
                  compatible;       
                  \s*
                  \w*            # имя браузера
                  [\s|\/]        # разделитель имени и версии
                  ([^;]*)        # все, что до ';' принимаем за версию браузера
                  ;
                  /x);
    $browser = 'MSIE';    
  }
  
  # проверка для браузеров, использующих gecko
  if( index($user_agent,"gecko") != -1 ) 
  {
    # firefox
    if( $user_agent =~ /(firefox|firebird|phoenix)/ )
    {  ($browser, $version) = ($user_agent =~ /(firefox|firebird|phoenix)\/([\.\d]*)/);  }
    # netscape
    else
    {  
      if( index($user_agent, "netscape") != -1 || index($user_agent, "nsb") != -1 )
      {
        ($version) = ($user_agent =~ /\/([\.\d]*)/); 
        $browser = 'Netscape';
      }
      else
      {
        # если это ни firefox ни netscape, но с gecko, то, наверное, это Mozilla
        if( index($user_agent, "mozilla") != -1 )
        {
          ($version) = ($user_agent =~ /\/([\.\d]*)/); 
          $browser = 'Mozilla';
        }
      }
    }
  }  
  
  # Самый "интересный" браузер Opera
  if( index($user_agent,"opera") != -1 )
  {
    ($version) = ($user_agent =~ /opera[\/\s]([\.\d]*)/);
    $browser = 'Opera';
  }
  
  # Safari ( браузер MAC OS )
  if( index($user_agent, "safari") != -1 ) # надо полагать, что старые версии Safari называли себя "applewebkit"
  {  
    ($version) = ($user_agent =~ /\/([\.\d]*)/);  
    $browser = 'Safari';
  } 
  
  # Если браузер не является ни одним из вышеперечисленных, то попробуем определить его имя и версию.
  # ^(\w*)[\/\s]([\.\d]*) - строка, где имя браузера стоит на первом месте, 
  # например AmigaVoyager/3.4.4 (MorphOS/PPC native)
  # \s+(\w*)[\/\s]([\.\d]*) - например, Mozilla/4.0 (compatible; MSIE 6.0; WINDOWS; .NET CLR 1.1.4322)
  unless( $browser )
  {  ($browser, $version) = ($user_agent =~ /^(\w*)[\/\s]([\.\d]*)|\s+(\w*)[\/\s]([\.\d]*)/);  }
  
  return( $browser ? ($browser .' '. ( $version ? $version : '?' )) : 'unknown' );
}



Это только "флагманские агенты", есть желание добавить еще.
Собственно, вопросов особо нет... единственно.. не уверен, какие браузеры следует определять.. т.е. кроме "основных" под Win
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0941 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.