Detectar el navegador y toda su información desde PHP o Javascript
Hola, les hago una intro bien corta y pasamos al código.
Browscap es un proyecto que recoge la información de todos los navegadores web en una base de datos que distribuye de forma gratuita y en varios formatos.
PHP tiene soporte nativo para hacer uso de esta DB, pero debido a un par de limitaciones que PHP aun no ha solventado en su API, en GitHub un usuario creó una soluciona basada también en la DB de Browscap pero mucho mas robusta y fácil de usar.
Bien, llegados a este punto sabemos que lo que necesitamos usar es Browscap junto a la librería que se creó para explotarla.
Para mas información, toda la documentación completa de php-browscap la pueden encontrar aquí. Yo me centro en una implementación mucho mas simple porque realmente creo que de los 40 datos que entrega sobre el navegados, con apenas 7 tenemos el 99% de los casos cubiertos.
Acá tienen un ejemplo funcionando para que vean lo rápido y certero que es a la hora de conseguir la info del browser (pruébenlo con mas de uno)
Ok, pongamos algo de código que sino todo esto es muy aburrido:
Vamos a aprovechar esta librería bajo dos situaciones. en PHP y en JS
En PHP
Descarguen la librería php-browscap via Composer o a mano. Pueden saber mas sobre como descargarla aquí
Ahora que la tenemos creamos un archivo index.php para usarla.
1 2 3 4 5 6 |
require 'vendor/autoload.php'; use phpbrowscapBrowscap; $bc = new Browscap('cache'); /** @var stdClass $current_browser */ $current_browser = $bc->getBrowser(); |
Fácil, no?. Ok ya tenemos un stdClass en $current_browser con toda la información disponible del browser que llame a index.php
Aplicaciones?
Puedes por ejemplo tomar decisiones del tipo
1 2 3 4 5 6 7 8 9 10 11 |
$curr_br = $current_browser->Browser; $CoolBrowsers = $curr_br == 'Chrome' || $curr_br == 'Firefox'; if ($CoolBrowsers) { add_asset('css', 'just-for-cool-browsers.css'); $output = renderAdvancedLayout(); } else { add_asset('css', 'just-for-bad-bad-browsers.css'); $output = renderBasicLayout(); } |
También puedes detectar si están accediendo desde un móvil o una tablet, incluso saber si es Android, IOS, la version del SO, etc. Con toda esta información a resumidas cuentas puedes entregar un contenido muy preciso.
Beneficios
Estas entregando contenidos a medida, ergo necesitas entregar menos HTML, CSS, Js y las imágenes mas adecuadas al navegador. Esto finalmente se traduce en menos procesamiento del lado del servidor, lo que se entrega pesa menos KB y el navegador tarda menos en leer y renderizar todos los recursos (en especial JS).
En JS
Por ultimo me gustaría compartir un tip para poder aprovechar la detección de browsers en JS:
A ver, con js podemos detectar el browser usando un poco de expresiones regulares, pero llegar al detalle y la precisión a la que llega browscap es virtualmente imposible. Dicho esto, comentar que se puede entregar toda la información del browser detectado desde php simplemente haciendo esto:
1 2 3 4 5 |
<script type="application/javascript"> var browser = <?= json_encode($current_browser = $bc->getBrowser()); ?>; alert(browser.Browser); alert(browser.Version); </script> |
Hasta la próxima!