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?
<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>
Y si falla un script o alguien los tiene deshabilitados no habrá estilo en tu sitio web?
Usa esto:
<?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.
muchas gracias!
sale este error :S
Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\projecte\pag\content.php on line 29
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
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
if (eregi($pattern, $user_agent))
esta desfasada
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.
Fatal error: Using $this when not in object context in C:\xampp\htdocs\projecte\pag\content.php on line 32
$gear_browser = strtolower(trim($this -> gear_browser['browser'][0]));
aah verdad, reemplaza $this -> gear_browser por $gear_browser, se me habia olvidado quitarlo, esque lo utilizo dentro de una clase.
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