Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как определить браузер и подключить CSS?
 
 автор: User_PHP   (19.09.2009 в 14:07)   письмо автору
 
 

Привет всем.
Подскажите кто знает как при загрузке страницы определить браузер пользователя, и в соответствии подключить нужный файл стилей.
Скажем для Оперы – St_op.css , а для Мазилы - St_mz.css

  Ответить  
 
 автор: cheops   (19.09.2009 в 14:13)   письмо автору
 
   для: User_PHP   (19.09.2009 в 14:07)
 

Можно, конечно, ориентироваться на пользовательский агент user_agent, однако, это не надежный способ определения браузера, так как он может быть изменен. Особенно этим грешит Opera, которая не только позволяет пользователю изменять его как угодно, но и в некоторых версиях маскируется под Internet Explorer. Самый надежный способ - это верстать страницы таким образом, чтобы они не зависили от браузера.

PS А вообще можно проанализовать содержимое navigator.appName и navigator.userAgent в JavaScript и в зависимости от их состояния подключить ту или иную таблицу стилей.

  Ответить  
 
 автор: АЯ   (19.09.2009 в 14:32)   письмо автору
 
   для: cheops   (19.09.2009 в 14:13)
 

Вы не правы - userAgent НЕ МОЖЕТ БЫТЬ изменен.

  Ответить  
 
 автор: cheops   (19.09.2009 в 14:59)   письмо автору
 
   для: АЯ   (19.09.2009 в 14:32)
 

Может, ваша текущая версия это не позволяет делать, тем не менее такие версии Opera существовали. В любом случае фраза
>Вы не правы - userAgent НЕ МОЖЕТ БЫТЬ изменен.
слишком сильна. userAgent меняется очень просто (в силу своей клиентской природы), при помощи того же PHP-скрипта, не говоря о том, что эти строки хранятся в реестре ([HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]) который позволяет превращать IE в Opera или FireFox. С остальными браузерами ситуация аналогичная, Opera одно время даже интерфейс предоставляла для изменения этой позиции - сейчас действительно что-то не могу найти.

PS Дело в том, что эта строка заполняется из соответствующего HTTP-заголовка, который передает клиент - он может передать в нем что угодно. Например, многие FireWall-ы просто передают информацию о том, что такой-то FireWall скрыл пользовательский агент.

  Ответить  
 
 автор: АЯ   (19.09.2009 в 15:50)   письмо автору
 
   для: cheops   (19.09.2009 в 14:59)
 

>Opera одно время даже интерфейс предоставляла для изменения этой позиции - сейчас действительно что-то не могу найти.

Наберите в адресной строке about:config, там найдёте UserAgent.
Который якобы можно изменить (имеется общий Help)
Однако, как бы вы не меняли, указание о том, что это - OPERA, в строке userAgent остаётся.

  Ответить  
 
 автор: cheops   (19.09.2009 в 16:15)   письмо автору
 
   для: АЯ   (19.09.2009 в 15:50)
 

>Однако, как бы вы не меняли, указание о том, что это - OPERA, в строке userAgent остаётся.
Да, останется, такова текущая реализация (в случае Opera) , это если я не буду пользоваться плагинами. Да вероятно, в случае JavaScript подделать пользовательский агент будет потруднее. Но если задаться этой целью, то возможно и это. Другое дело, что этот подход в принципе ущербен - выходят новые браузеры и их версии, а этот подход требует сопровождения нескольких версий сайта. Потом появляется соблазн использовать пользовательский агент в серверных скриптах и вот тут начинают происходить сбои, так как его зачастую отсекают FireWall-ы.

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

  Ответить  
 
 автор: cheops   (19.09.2009 в 16:31)   письмо автору
20.8 Кб
 
   для: АЯ   (19.09.2009 в 15:50)
 

Возбудили вы меня :))) добился я таки, чтобы Opera была удалена из UserAgent (во вложении Opera прикинулась FireFox-ом). Во-первых имеются разделы 4 и 5, где явно можно указать, чтобы значение Oper не указывалось, во-вторых имеется раздел Special, где происходит прямая манипуляция значениями, возвращаемыми AppName и названием браузера. Поэтому при желании можно сделать что угодно, а редактируя OperaDef6.ini это можно делать и сторонними программами.

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

  Ответить  
 
 автор: User_PHP   (19.09.2009 в 15:27)   письмо автору
 
   для: cheops   (19.09.2009 в 14:13)
 

>Самый надежный способ - это верстать страницы таким образом, чтобы они не зависили от браузера.

Может подскажите хароший FAQ по этому вопросу. Ато я скачал две книги но там о совместимости особо ничего нет.!!!

  Ответить  
 
 автор: cheops   (19.09.2009 в 15:42)   письмо автору
 
   для: User_PHP   (19.09.2009 в 15:27)
 

По сути более или менее совместимые вещи можно сделать придерживаясь двух правил:
1. Использовать CSS 2.0
2. Явно указывать <!DOCTYPE, выводя браузеры из состояния обратной совместимости со старыми правилами (напичканных ошибками). Хорошо, если сразу будете ориентироваться на XHTML.

PS Все остальное - трюки, время жизни которых будет ограниченным. Это не значит, что их не нужно изучать, но в долгосрочной перспективе следует ориентироваться на указанные выше два подхода.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования