javascript, reducir o "llamar" funcion

Iniciado por Neibar, 8 Mayo 2012, 19:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Neibar

tengo este "tocho" para saber qué navegador se usa y sistema operativo, para usar
un tipo de estilo u otro, entonces...

Por lo que he mirado, se pueden hacer meta's cmo si de un estilo se tratara. Alguno me podría
orientar un poco sobre esto?

Código (javascript) [Seleccionar]

<script language="javascript">
//detección del navegador
var BrowserDetect = {
   init: function () {
  this.browser = this.searchString(this.dataBrowser) || "unknown";
  this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "unknown";
  this.OS = this.searchString(this.dataOS) || "an unknown OS";
   },
searchString: function (data) {
   for (var i=0;i<data.length;i++) {
  var dataString = data[i].string;
  var dataProp = data[i].prop;
  this.versionSearchString = data[i].versionSearch || data[i].identity;
  if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
  }
  else if (dataProp)
  return data[i].identity;
   }
},
searchVersion: function (dataString) {
   var index = dataString.indexOf(this.versionSearchString);
   if (index == -1) return;
   return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
},
dataBrowser: [
{
   string: navigator.vendor,
   subString: "Apple",
   identity: "Safari"
},
{
   prop: window.opera,
   identity: "Opera"
},
{
   string: navigator.vendor,
   subString: "iCab",
   identity: "iCab"
},
{
   string: navigator.vendor,
   subString: "KDE",
   identity: "Konqueror"
},
{
   string: navigator.userAgent,
   subString: "Firefox",
   identity: "Firefox"
},
{
   string: navigator.vendor,
   subString: "Camino",
   identity: "Camino"
},
{ // for newer Netscapes (6+)
   string: navigator.userAgent,
   subString: "Netscape",
   identity: "Netscape"
},
{
   string: navigator.userAgent,
   subString: "MSIE",
   identity: "Explorer",
   versionSearch: "MSIE"
},
{
   //esta parte reconoce el chrome
   string: navigator.userAgent,
   subString: "Gecko",
   identity: "Chrome", //Mozilla
   versionSearch: "rv"
},
{ // for older Netscapes (4-)
   string: navigator.userAgent,
   subString: "Mozilla",
   identity: "Netscape",
   versionSearch: "Mozilla"
}
],
dataOS : [
{
   string: navigator.platform,
   subString: "Win",
   identity: "Windows"
},
{
   string: navigator.platform,
   subString: "Mac",
   identity: "Mac"
},
{
   string: navigator.platform,
   subString: "Linux",
   identity: "Linux"
}
]

};
BrowserDetect.init();

//estilos de cada navegador
if (BrowserDetect.browser == "Firefox") {
document.write("<LINK REL='stylesheet' HREF='../css/content.css' TYPE='text/css'>");
} else {

if (BrowserDetect.browser == "Explorer"){
   if (BrowserDetect.version>=7){
  document.write("<LINK REL='stylesheet' HREF='../css/ie7.css' TYPE='text/css'>");
   }
} else {

if (BrowserDetect.browser == "Opera"){
  if (BrowserDetect.version<9){
document.write("<LINK REL='stylesheet' HREF='../css/opera.css' TYPE='text/css'>");
  }else{
document.write("<LINK REL='stylesheet' HREF='../css/opera9.css' TYPE='text/css'>");
  }
} else {

if (BrowserDetect.browser == "Safari"){
document.write("<LINK REL='stylesheet' HREF='../css/safari.css' TYPE='text/css'>");
}else{
document.write("<LINK REL='stylesheet' HREF='../css/chrome.css' TYPE='text/css'>");
}
}
}
}

</script>

WHK

Y si falla un script o alguien los tiene deshabilitados no habrá estilo en tu sitio web?

Usa esto:
Código (php) [Seleccionar]
<?php
/* Detecta el motor del agente de usuario */
preg_match_all'#(?<browser>' join('|', array('msie''firefox''safari''webkit''opera''netscape''konqueror''gecko')).')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#'strtolower($_SERVER['HTTP_USER_AGENT']), $gear_browser);
if(
$gear_browser['browser'][0]){
$gear_browser strtolower(trim($this->gear_browser['browser'][0]));
$gear_browser str_replace(
array('msie','firefox','konqueror','opera','safari'),
array('trident','gecko','khtml','presto','webkit'),
$gear_browser);
}
echo 
$gear_browser;


Con eso sabrás si es webkit, gecko, trident,. etc, lo necesario para hacer hojas de estilo. No vas a hacer una hoja de estilo para chrome y otra para safari, ambos usan el mismo motor para redenderizar los estilos.

Neibar

#2
muchas gracias!

sale este error :S

Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\projecte\pag\content.php on line 29

Código (php) [Seleccionar]
preg_match_all( '#(?<browser>' . join('|', array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 'konqueror', 'gecko')).')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#', strtolower($_SERVER['HTTP_USER_AGENT']), $gear_browser);

He encontrado una funcion parecida a la tuya

Código (php) [Seleccionar]

function ObtenerNavegador($user_agent) {
     $navegadores = array(
          'Opera' => 'Opera',
          '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';
}
?>

...

<?php echo ObtenerNavegador($_SERVER['HTTP_USER_AGENT']) ?>


solo que la parte de

Código (php) [Seleccionar]

if (eregi($pattern, $user_agent))

esta desfasada

WHK

Lo acabo de probar y funciona bién, vee si no tienes algun error de código antes de ese, intenta usar algun editor que te convierta todos los saltos de linea a un solo formato, yo uso mac y talves te den problema ya que no son lo mismo que windows.

Neibar

Fatal error: Using $this when not in object context in C:\xampp\htdocs\projecte\pag\content.php on line 32
Código (php) [Seleccionar]

$gear_browser = strtolower(trim($this -> gear_browser['browser'][0]));

WHK

aah verdad, reemplaza $this -> gear_browser por $gear_browser, se me habia olvidado quitarlo, esque lo utilizo dentro de una clase.

Neibar

Cita de: WHK en  8 Mayo 2012, 22:18 PM
aah verdad, reemplaza $this -> gear_browser por $gear_browser, se me habia olvidado quitarlo, esque lo utilizo dentro de una clase.

ok xD