Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/05/2008, 04:42
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 5 meses
Puntos: 832
La solución definitiva para los conflictos entre navegadores

Estaba leyendo este post y se me ocurrió aplicar la técnica para las hojas de estilo. Vean el código fuente de la siguiente página desde distintos navegadores, en especial el nombre de la hoja de estilos:

http://www.darioferrer.com/varios/compatibilidad.php

El código está intacto, lo que hice fue agregar Safari al combo. Esto debe colocarse antes de las etiquetas <link> (en el header):

Código PHP:
<?php
function ObtenerNavegador($user_agent) {
     
$navegadores = array(
          
'Opera' => 'Opera',
          
'Safari' => 'Safari',
          
'Mozilla Firefox'=> '(Firebird)|(Firefox)',
          
'Galeon' => 'Galeon',
          
'Mozilla'=>'Gecko',
          
'MyIE'=>'MyIE',
          
'Lynx' => 'Lynx',
          
'Netscape' => '(Mozilla/4\.75)|(Netscape6)|(Mozilla/4\.08)|(Mozilla/4\.5)|(Mozilla/4\.6)|(Mozilla/4\.79)',
          
'Konqueror'=>'Konqueror',
          
'Internet Explorer 7' => '(MSIE 7\.[0-9]+)',
          
'Internet Explorer 6' => '(MSIE 6\.[0-9]+)',
          
'Internet Explorer 5' => '(MSIE 5\.[0-9]+)',
          
'Internet Explorer 4' => '(MSIE 4\.[0-9]+)',
);
foreach(
$navegadores as $navegador=>$pattern){
       if (
eregi($pattern$user_agent))
       return 
$navegador;
    }
return 
'Desconocido';
}
?>
Ahora la parte de las hojas de estilo:
Código PHP:
<?php if(ObtenerNavegador($_SERVER['HTTP_USER_AGENT']) == 'Internet Explorer 6') { ?>
  <link rel="stylesheet" media="screen" type="text/css" href="ie6.css" />
<?php } elseif(ObtenerNavegador($_SERVER['HTTP_USER_AGENT']) == 'Internet Explorer 7') { ?>
  <link rel="stylesheet" media="screen" type="text/css" href="ie7.css" />
<?php } elseif(ObtenerNavegador($_SERVER['HTTP_USER_AGENT']) == 'Operai') { ?>
  <link rel="stylesheet" media="screen" type="text/css" href="opera.css" />
<?php } elseif(ObtenerNavegador($_SERVER['HTTP_USER_AGENT']) == 'Safari') { ?>
  <link rel="stylesheet" media="screen" type="text/css" href="safari.css" />
<?php } else { ?>
  <link rel="stylesheet" media="screen" type="text/css" href="estilos.css" />
<?php ?>
Lo mejor es que -al incluir la detección hacia los navegadores que queramos- expande las opciones para el diseñador. Además sólo se visualiza el enlace a la hoja, lo cual no ocurre con el comentario IF, el cual aparece en el código fuente.

Esto puede servir también para solucionar problemas de estructura, tales como algunos menús desplegables u otras cosillas que nos convengan. La imaginación manda. En fin, con esto le digo chao al comentario condicional. Espero les sirva.