0

我有一个键值对数组,其中包含在用户代理字符串中找到的关键字。我需要遍历这些对并将每个值匹配到 navigator.userAgent 字符串。我知道浏览器嗅探是不受欢迎的,但这不取决于我。我可以使用 for 循环代替 Ext.each(我不太熟悉)。这是我第一次解决这个问题的 jsfiddle http://jsfiddle.net/tagZN/83/但我被告知要以其他方式代替。

<script type="text/javascript"> 

var deviceProfiles = 
[ 
    '{match:Macintosh, name:Mac Desktop}',
    '{match:Windows NT, name:Windows Desktop}',
    '{match:Ubuntu, name:Ubuntu,layout:desktop}',
    '{match:Silk, name:Kindle Fire,layout:tablet}'

];     

var ua = navigator.userAgent;
var re = new RegExp(deviceProfiles.join("|"), "i");    
var identifyDevice = function( ua )
{
    Ext.each(
        deviceProfiles,
        function( profile )
        {
            return ua.match( profile.match ) == nil;
        }

    );
}    

</script>    

我最初也被赋予 deviceProfile 为(并被告知填写匹配和名称的值):

var deviceProfiles =
[
    { 
        match: 'user agent regular expression here', 
        name: 'name of device here',        
    },

    { 
        match: 'user agent regular expression here', 
        name: 'name of device here'             
    },

    { 
        match: 'user agent regular expression here', 
        name: 'name of device here',            
    }
];​

但它没有用,所以我把它改成了你在上面看到的。这是一个糟糕的电话。我试图破译我得到了什么。我也创造了

var re = new RegExp(deviceProfiles.join("|"), "i");    

即使它还没有被使用,我相信它是必要的。我已经通过将 ua 设置为等于我复制并粘贴到关键字包含在数组 deviceProfiles 中的实际用户代理字符串来对此进行了测试,但仍然没有运气。

任何帮助都非常感谢。

4

1 回答 1

0

你说得对,浏览器嗅探是一种有缺陷的策略,除了休闲娱乐之外。

您的代码存在许多问题,尤其是deviceProfiles是字符串数组,而不是对象。此外,代码试图检测用户代理,然后对平台进行猜测。它实际上与设备无关,例如在非 Windows 笔记本电脑上的虚拟机中运行 IE 返回“Windows 桌面”,这是完全错误的。应该如何处理不匹配的用户代理字符串?

手机、笔记本电脑、游戏机和电视等设备上有数以千计的浏览器。每天都有更多的设备访问互联网和网页,你能嗅出它们吗?

无论如何,这里是如何做你想做的事情:

function getDevice() {
  var deviceProfiles = [ 
      {match: 'Macintosh', name: 'Mac Desktop'},
      {match: 'Windows NT', name: 'Windows Desktop'},
      {match: 'Ubuntu', name: 'Ubuntu', layout:'desktop'},
      {match: 'Silk', name: 'Kindle Fire', layout:'tablet'}
  ];     

  var ua = navigator.userAgent;
  var profile, re;

  for (var i=0, iLen=deviceProfiles.length; i<iLen; i++) {
    profile = deviceProfiles[i];

    if (ua.match(profile.match)) {
      return profile.name;
    }
  }
}

alert(getDevice());
于 2012-08-19T13:03:17.697 回答