Tiempo estimado de lectura:
 1 (function (window, navigator) {
 2     var OS = window.OS = (function(){
 3         var obj = {
 4             initialized: false,
 5             regex: {
 6                 os: {
 7                     iOS: /iPhone|iPad|iPod/i,
 8                     Android: /Android/i,
 9                     Windows: /IEMobile/i,
10                     Opera: /Opera Mini/i
11                 },
12                 version: {
13                     iOS: /OS (\d+)_(\d+)_?(\d+)?/,
14                     Android: /Android (\d+)\.(\d+)\.?(\d+)?/,
15                     Windows: /IEMobile\/(\d+)\.(\d+)\.?(\d+)?/,
16                     Opera: /Opera Mini\/(\d+)\.(\d+)\.?(\d+)?/,
17                 }
18             },
19             init: function () {
20                 this.initialized = true;
21                 for (var key in this.regex.os)
22                     if (navigator.userAgent.match(this.regex.os[key]))
23                         this.name = key;
24                 if (!this.name) return;
25                 var v = navigator.appVersion.match(this.regex.version[this.name]),
26                     M = parseInt(v[1], 10),
27                     m = parseInt(v[2], 10),
28                     u = parseInt(v[3] || 0, 10);
29                 this.version = {
30                     major: M,
31                     minor: m,
32                     micro: u,
33                     version: M + '.' + m,
34                     fullVersion: M + '.' + m + '.' + u
35                 };
36             },
37             name: null,
38             version: null,
39             is: function(key) {
40                 if (!this.initialized) this.init();
41                 return key.toLowerCase() == this.name.toLowerCase();
42             }
43         };
44         obj.init();
45         return obj;
46     })();
47 })(window, navigator);

Utilizarlo es francamente fácil, ya que se inicializa solo y publica una variable OS en el espacio de variables global, sin molestar mucho más.

// ...
  regex: {
    os: {
      ...
      Blackberry: /Blackberry/i
    },
    version: {
      Blackberry: /Version\/(\d+)\.(\d+)\.(\d+)\.(\d+)/
    }
  },
// ...

Puedes añadir más sistemas operativos y versiones utilizando siempre la misma clave para los nombres de las expresiones regulares. Si quieres añadir la detección de dispositivos Blackberry puedes hacer:

var message = 'Hi ';
if (OS.is('iOS')) {
  message = message + 'Steve';
  if (OS.version.major == 7) {
    message = message + ", this OS lacks some details... isn't it?";
  }
} else if (OS.is('Android')) {
  message = message + 'Larry';
  if (OS.version.major < 4) {
    message = message + ', you should update your OS...';
  }
} else if (OS.is('Windows')) {
  message = message + 'Bill';
} else {
  message = message + 'Bob';
}

console.log(message);
console.log('You are using ' + OS.name + ' version ' + OS.version.fullVersion + '!');

Es una forma de encapsular esta funcionalidad. No es perfecta, pero para salir de un apuro, vale.

Blog Logo

Carlos Escribano

Desarrollador Web desde hace 10 años. Me gusta resolver problemas de forma ingeniosa. Saber más.

Artículos de desarrollo web en español

nettoys.es

Volver al Inicio