我正在编写一个设备和功能检测库(不是真正用于任何实际用途,只是试验和玩耍),就设备检测而言,我应该完成,但我只有一个(我认为)问题。我的代码:
var $device = {
mobile: {
android: navigator.userAgent.match(/Android/i),
blackberry: navigator.userAgent.match(/BlackBerry/i),
iphone: navigator.userAgent.match(/iPhone/i),
ipod: navigator.userAgent.match(/iPod/i),
opera: navigator.userAgent.match(/Opera Mini/i),
windows: navigator.userAgent.match(/(Windows Phone OS|Windows CE|Windows Mobile|IEMobile)/i)
},
tablet: {
ipad: navigator.userAgent.match(/iPad/i),
galaxy_tab: navigator.userAgent.match(/(GT-P1000|GT-P1000R|GT-P1000M|SGH-T849|SHW-M180S)/i),
windows: navigator.userAgent.match(/Tablet PC/i)
},
desktop: {
other: navigator.userAgent.match(/(Linux|X11)/i),
mac: navigator.userAgent.match(/(Macintosh|Mac OS X)/i),
windows: navigator.userAgent.match(/Windows/i)
}
}
$device = {
mobile: {
any: $device.mobile.android || $device.mobile.blackberry || $device.mobile.iphone || $device.mobile.ipod || $device.mobile.opera || $device.mobile.windows
},
tablet: {
any: $device.tablet.ipad || $device.tablet.galaxy_tab || $device.tablet.windows
},
desktop: {
any: $device.desktop.other || $device.desktop.mac || $device.desktop.windows
}
}
if($device.mobile.any) {
$device = {
type: "Mobile Phone"
}
} else if($device.tablet.any) {
$device = {
type: "Tablet"
}
} else if($device.desktop.any) {
$device = {
type: "Desktop"
}
}
if($device.desktop.windows){alert("Hello")}
现在,就 userAgent 字符串而言,我并不完全相信它们都是正确的,我还没有测试它们,但这不是我的问题。我的问题是,它不会alert
“你好”,谷歌浏览器开发者工具中的错误消息是:Uncaught TypeError:无法读取未定义的属性“windows”
现在,根据我使用 Google 工具的经验,这告诉我在某处我的语法不正确,而不是我的方法,但我似乎无法理解。有什么帮助吗?(顺便说一句:我知道用户代理嗅探不好,这就是为什么我稍后也会用特征检测来支持它。)