2012-01-30 12 views
9

Estoy tratando de detectar con javascript si mi sitio web se ejecuta en un dispositivo móvil kindle fire. Lo he intentado con navigator.userAgent y navigator.appVersion pero obtengo estos resultados en kindle:¿Cómo puedo detectar kindle fire con javascript?

5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/533.16 (KHTML, como Gecko) Version /5.0 Safari/533.16

y

Mozilla/5.0 (Macintosh; T; Intel Mac OS X 10_6_3; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533,16

¿Qué puedo usar para saber si estoy conectado y no en otro dispositivo?

Respuesta

6

La cadena de agente de usuario para Kindle Fire es:

Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 

En el modo de Seda:

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true 
+0

impresionante. ¿Puede proporcionar un registro que funcione como actualizaciones de Kindle a versiones más nuevas? – Aaron

+5

Lo anterior no funcionará más allá de la primera generación Kindle Fire.Hubiera sido agradable si Amazon se hubiera quedado con "Kindle Fire" en sus cadenas de agente de usuario, pero desde Kindle Fire 2nd generation han pasado a acrónimos crípticos como KFTT, KFJWI y KFJWA. Consulte aquí para obtener más información: https://developer.amazon.com/sdk/fire/specifications.html#UserAgentStrings –

7

hay dos cosas que usted debe comprobar si hay 1/Seda (o de seda-acelerado) 2/"Kindle", "KFOT", "KFTT" u otros de la tabla en https://developer.amazon.com/sdk/fire/specifications.html

En seda o paso # 1 debería darle c CONFIRMACIÓN, si se está accediendo a la página web desde un WebView luego # 2 se cogerlo

+1

Gracias por el enlace de referencia perfecto. – Yaakov

15

en Javascript,

var ua = navigator.userAgent; 
var isKindle = /Kindle/i.test(ua) || /Silk/i.test(ua) || /KFTT/i.test(ua) || /KFOT/i.test(ua) || /KFJWA/i.test(ua) || /KFJWI/i.test(ua) || /KFSOWI/i.test(ua) || /KFTHWA/i.test(ua) || /KFTHWI/i.test(ua) || /KFAPWA/i.test(ua) || /KFAPWI/i.test(ua); 
if(isKindle) { 
//Your code here 
} 
+2

Versión condensada (y actualizada para incluir [Kindles actuales] (https://developer.amazon.com/appsandservices/solutions/devices/kindle-fire/specifications/01-device-and-feature-specifications) a partir de esta fecha de comentario): '/Kindle|Silk|KFAPW|KFARWI|KFASWI|KFFOWI|KFJW|KFMEWI|KFOT|KFSAW|KFSOWI|KFTBW|KFTHW|KFTT|WFFOWI/i.test (ua)' – ecraig12345

2

Un problema es que Amazon cambia las cuerdas para cada nuevo modelo. Puede comprobar únicamente Kindle, Silk y KF *, pero eso podría generar falsos positivos. He alterado un poco el código de uno de los ejemplos anteriores para que sea un poco más legible y fácil de mantener.

A partir del 18 de noviembre de 2015, el siguiente código debería funcionar.

Compruebe https://developer.amazon.com/sdk/fire/specifications.html para los nuevos modelos.

Este es el código que he escrito para redirigir la gente a mi juego Luna Puma de mi sitio web para ambos teléfonos Kindle Fire y Android:

<script type="text/javascript"> // <![CDATA[ 

    var ua = navigator.userAgent; 

    var kindleStrings = [ 
    "Kindle", 
    "Silk", 
    "KFTT", 
    "KFOT", 
    "KFJWA", 
    "KFJWI", 
    "KFSOWI", 
    "KFTHWA", 
    "KFTHWI", 
    "KFAPWA", 
    "KFAPWI", 
    "KFASWI", 
    "KFTBWI", 
    "KFMEWI", 
    "KFFOWI", 
    "KFSAWA", 
    "KFSAWI", 
    "KFARWI" ]; 

    var isKindle = false; 

    for (index = 0; index < kindleStrings.length; index++) { 
     var matchRegExp = new RegExp (kindleStrings[index]); 
     if (matchRegExp.test (ua)) { 
      isKindle = true; 
      break; 
     } 
    } 

    if (isKindle) { 
     document.location = "amzn://apps/android?asin=B01859LRE0"; 
    } 

    var isAndroid = /Android/i.test (ua); 

    if (isAndroid && !isKindle) { 
     document.location = "https://play.google.com/store/apps/details?id=com.xanamania.lunapuma"; 
    } // ]]> 

</script> 
1

detectar si se está ejecutando en un fuego Kindle es mucho más complicado que detectar otras plataformas, ya que el agente de usuario puede usar muchos disfraces.

Escribí este is-mobile component que puede detectar si está ejecutando en Kindle Fire, y otras plataformas también.

dude en importar y utilizar como se muestra en estos ejemplos:

isMobile.Android() => true/false 
isMobile.iOS() => true/false 
isMobile.any() => true/false 
isMobile.KindleFire() => true/false 
isMobile.BlackBerry() => true/false 
Cuestiones relacionadas