我有一个key:value对数组,其中包含在useragent字符串中找到的关键字。我需要遍历这些对并匹配每个值以匹配navigator.userAgent字符串。我知道浏览器嗅探是不受欢迎的,但这不取决于我。而不是Ext.each(我不是那么熟悉),我可以使用for循环。这是我第一次解决这个问题的方法 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中,但仍然没有运气。
真正感谢任何帮助。
答案 0 :(得分: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());