如何使用JavaScript检测Kindle Fire?

10

我想使用JavaScript检测我的网站是否在Kindle Fire移动设备上运行。我已经尝试过navigator.userAgent和navigator.appVersion,但在Kindle上得到的结果是:

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

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

我该如何从这些字符串中获取信息以知道我是否在Kindle上而不是其他设备上?

5个回答

16

在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
}

4
根据此评论日期包括当前Kindles的更新版本:/Kindle|Silk|KFAPW|KFARWI|KFASWI|KFFOWI|KFJW|KFMEWI|KFOT|KFSAW|KFSOWI|KFTBW|KFTHW|KFTT|WFFOWI/i.test(ua)。 (该内容是JavaScript代码,用于检测用户代理字符串中是否包含与Kindle设备有关的关键字) - ecraig12345

6

Kindle Fire的用户代理字符串为:

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

在 Silk 模式下:
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

太棒了。你能提供一个正则表达式,可以适用于 Kindle 更新到新版本吗? - Aaron
5
以上方法只适用于第一代 Kindle Fire,如果亚马逊在用户代理字符串中仍然使用“Kindle Fire”就更好了,但自从第二代 Kindle Fire 开始,它们就转向使用像 KFTT、KFJWI 和 KFJWA 这样的加密缩写。有关详情,请参见此处:https://developer.amazon.com/sdk/fire/specifications.html#UserAgentStrings - Andrew Childs

6

有两件事情你需要检查: 1/ Silk(或Silk-Accelerated) 2/ "Kindle"、"KFOT"、"KFTT"或其他在https://developer.amazon.com/sdk/fire/specifications.html表格中的设备。

如果使用的是Silk或通过方式访问网页,第一点将会给你确认;如果是从WebView访问,则第二点会捕捉到它。


1
感谢提供完美的参考链接。 - Yaakov

2
一个问题是,亚马逊为每个新型号更改字符串。您可以仅检查Kindle、Silk和KF*,但这可能会导致误报。我从上面的示例中稍微修改了一下代码,使其更易读和易于维护。
截至2015年11月18日,以下代码应该可以工作。
请查看https://developer.amazon.com/sdk/fire/specifications.html以获取新模型信息。
以下是我编写的代码,用于将人们从我的网站重定向到我的游戏Luna Puma,适用于Kindle Fire和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>

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接