2009-03-15 35 views
18

Me preguntaba si hay una forma de que pueda detectar la versión exacta del sistema operativo desde mi navegador utilizando PHP/JS/ASP?Detectar la versión exacta del sistema operativo desde el navegador

Sé que puedo detectar el tipo de SO (Windows XP, Windows Vista, OS X, etc.) pero necesito detectar la versión exacta: Vista Business, Vista Ultimate, Windows XP Home, Windows XP Pro, etc. ..

Respuesta

25

Respuesta corta: No puede.

Respuesta larga:

Todo lo que tienes es la información en el encabezado HTTP User-Agent, que por lo general contiene el nombre del sistema operativo y versión.

Normalmente, los navegadores que se ejecutan en Mac OS y Linux envían información suficiente para identificar el sistema operativo exacto. Por ejemplo, aquí está mi cabecera User-Agent:

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv: 1.9.0.7) Gecko/2009030423 Ubuntu/8,10 (intrépido) Firefox/3.0. 7

Puede ver que estoy ejecutando Ubuntu 8.10 Intrepid Ibex.

Y aquí es lo que Firefox y Safari 4 Beta informe en mi MacBook Pro:

Mozilla/5.0 (Macintosh; T; Intel Mac OS X 10.5; en-US; rv: 1.9.0.7) Gecko/2009021906 Firefox/3.0.7

Mozilla/5.0 (Macintosh; T; Intel Mac OS X 10_5_6; en-us) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528,16

de Windows los navegadores, por otro lado, generalmente solo informan la versión del sistema operativo y no el paquete específico (Pro, Negocio, etc.):

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; RV: x.x.x) Gecko/20041107 Firefox/x.x

+0

Tal vez sea posible a través de Flash? –

+2

@ Roy: tal vez, pero yo no apostaría. –

+0

Y tenga en cuenta que incluso esto no es infalible. Por ejemplo, cambiar la cadena de agente de usuario para informar algo diferente es trivial en Firefox (complemento de descarga) y casi trivial en IE (cambio de registro). –

1

No creo que usted será capaz de diferenciar diferentes versiones de Vista, pero debería ser capaz de obtener el sistema operativo de la plataforma propiedad del objeto navigator. Sin embargo, probablemente deba analizarlo o diferenciarlo según sus contenidos.

<script type="text/javascript"> 
    alert(navigator.platform); 
</script> 

Ver www.w3schools.com tutoriales para un example que muestran cómo conseguir todas las propiedades del navegador.

EDITAR:

para obtener la versión exacta, que puede ser capaz de desarrollar un control ActiveX (sólo Windows) o Java Applet y utilizar el objeto java.lang.System para ver las propiedades actuales del sistema. Es posible que pueda obtener suficiente información del navegador para sistemas que no sean de Windows y use el control solo para sistemas Windows. No he intentado esto, así que necesitarías experimentar para ver si funcionaría. Tengo que creer que el control ActiveX de Microsoft para Microsoft Update es capaz de detectar la versión exacta del sistema y el software instalado para que funcione.

+0

Como dijiste, esto no ayudará a diferenciar las sub versiones, pero gracias por el fragmento :-) –

1

Realmente debería intentar evitar hacer algo así a menos que sea absolutamente necesario para la funcionalidad de la aplicación web.

Tenga en cuenta que:

No todas las peticiones pueden venir de un cliente que se ejecuta en Windows.

No todas las solicitudes pueden provenir de un cliente que admita JavaScript.

El encabezado de usuario-agente puede no estar presente en la solicitud.

Lo que está en el encabezado de usuario-agente puede ser engañoso.

Una aplicación web bien diseñada debe proporcionar contenido y funcionalidad completos independientemente de lo que haya en el encabezado de usuario-agente de la solicitud o si el cliente admite javascript o cualquier otra extensión del cliente.

+0

Gracias, lo mantendremos en mente. –

+4

-1. No responde la pregunta de OP. Da una opinión no solicitada en su lugar. – maxedison

+0

Es información útil sobre la pregunta, pero no responde a la pregunta en sí (+0). Estoy de acuerdo contigo, pero como S.O. tiene diferencias, algunas veces es necesario verificarlo: por ejemplo: windows/linux use Ctrl para selección múltiple, mac use bowen-knot, si quiere explicarlo correctamente al usuario, puede: 1) explicar todo a ambos , 2) prueba el sistema operativo. –

1

Como ya han dicho otros, no, no confiablemente.

Esa es la razón por la que jquery ha cambiado a un sistema de capacidades de navegador (a falta de una palabra mejor) en lugar de un sistema de detección de navegador para sus funcionalidades.

+0

Las capacidades del navegador o el rastreo del navegador, como dices, están relacionadas con el NAVEGADOR, no con las relacionadas. Como ejemplo, Firefox 24 tiene las mismas capacidades en Linux, Mac o Windows. Esta pregunta es sobre S.O., no navegadores. –

2

En ASP clásico y ASP.NET utilizan

Request.ServerVariables("HTTP_USER_AGENT") 

Esto funciona mejor ya que no es interpretado código, este se ejecuta en el servidor.

+0

siempre es bueno tener código de trabajo o sugerencia de qué propiedad examinar – MikeJ

17

Después de algunas google me encontré con este código y parece estar funcionando bien, (no detecta Unix aunque)

<?php 
$OSList = array 
(
// Match user agent string with operating systems 
'Windows 3.11' => 'Win16', 
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)', 
'Windows 98' => '(Windows 98)|(Win98)', 
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)', 
'Windows XP' => '(Windows NT 5.1)|(Windows XP)', 
'Windows Server 2003' => '(Windows NT 5.2)', 
'Windows Vista' => '(Windows NT 6.0)', 
'Windows 7' => '(Windows NT 7.0)', 
'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)', 
'Windows ME' => 'Windows ME', 
'Open BSD' => 'OpenBSD', 
'Sun OS' => 'SunOS', 
'Linux' => '(Linux)|(X11)', 
'Mac OS' => '(Mac_PowerPC)|(Macintosh)', 
'QNX' => 'QNX', 
'BeOS' => 'BeOS', 
'OS/2' => 'OS/2', 
'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)' 
); 
// Loop through the array of user agents and matching operating systems 
foreach($OSList as $CurrOS=>$Match) 
{ 
// Find a match 
if (eregi($Match, $_SERVER['HTTP_USER_AGENT'])) 
{ 
// We found the correct match 
break; 
} 
} 
// You are using ... 
echo "You are using ".$CurrOS; 
?> 
+1

No es realmente lo que quería hacer, ¿verdad? :) – willcodejavaforfood

+1

Esto no detectará el paquete exacto del sistema operativo (digamos xp home vista ultimate) de windows – Ranjith

+0

además no detecta el sistema operativo móvil, que son bastante necesarios hoy en día –

14

// esto le ayudará a

$uagent = $_SERVER['HTTP_USER_AGENT'] . "<br/>"; 

function os_info($uagent) 
{ 
    // the order of this array is important 
    global $uagent; 
    $oses = array(
     'Win311' => 'Win16', 
     'Win95' => '(Windows 95)|(Win95)|(Windows_95)', 
     'WinME' => '(Windows 98)|(Win 9x 4.90)|(Windows ME)', 
     'Win98' => '(Windows 98)|(Win98)', 
     'Win2000' => '(Windows NT 5.0)|(Windows 2000)', 
     'WinXP' => '(Windows NT 5.1)|(Windows XP)', 
     'WinServer2003' => '(Windows NT 5.2)', 
     'WinVista' => '(Windows NT 6.0)', 
     'Windows 7' => '(Windows NT 6.1)', 
     'Windows 8' => '(Windows NT 6.2)', 
     'Windows 8.1' => '(Windows NT 6.3)', 
     'Windows 10' => '(Windows NT 10.0)', 
     'WinNT' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)', 
     'OpenBSD' => 'OpenBSD', 
     'SunOS' => 'SunOS', 
     'Ubuntu' => 'Ubuntu', 
     'Android' => 'Android', 
     'Linux' => '(Linux)|(X11)', 
     'iPhone' => 'iPhone', 
     'iPad' => 'iPad', 
     'MacOS' => '(Mac_PowerPC)|(Macintosh)', 
     'QNX' => 'QNX', 
     'BeOS' => 'BeOS', 
     'OS2' => 'OS/2', 
     'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)' 
    ); 
    $uagent = strtolower($uagent ? $uagent : $_SERVER['HTTP_USER_AGENT']); 
    foreach ($oses as $os => $pattern) 
     if (preg_match('/' . $pattern . '/i', $uagent)) 
      return $os; 
    return 'Unknown'; 
} 
echo os_info($uagent); 
+0

Debe aceptarse como la respuesta. –

1

He creado una función jQuery que hace esto. De esta manera podemos rastrear todo el sistema operativo usando navigator.

Esperanza alguien va a obtener ayuda de esto:

function find_os_version() { 
    var ua = navigator.userAgent.toLowerCase(); 
    if (ua.indexOf("windows nt 5.0") != -1) { 
    return 'win2k'; 
    } 
    if (ua.indexOf("windows nt 5.1") != -1) { 
    return 'winXP'; 
    } 
    if (ua.indexOf("windows nt 6.0") != -1) { 
    return 'winVista'; 
    } 
    if (ua.indexOf("windows nt 6.1") != -1) { 
    return 'win7'; 
    } 
    if (ua.indexOf("windows nt 6.2") != -1) { 
    return 'win8'; 
    } 
} 
1

Ésta podría ser la manera más fácil:

descarga Biblioteca de http://mobiledetect.net

Poner en Mobile_Detect.php a 'bibliotecas' si se emplea CI o simplemente incluirlo.

utilizar este código en PHP

$detect = new Mobile_Detect(); 
// Get the version() of components. 
$detect->version('iPad'); // 4.3 (float) 
$detect->version('iPhone') // 3.1 (float) 
$detect->version('Android'); // 2.1 (float) 
$detect->version('Opera Mini'); // 5.0 (float) 

documentación Buscar de http://dwij.co.in/mobile-os-detection-in-php-codeigniter

Cuestiones relacionadas