Skip to content

Instantly share code, notes, and snippets.

@miketaylr
Created October 28, 2013 17:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miketaylr/7200866 to your computer and use it in GitHub Desktop.
Save miketaylr/7200866 to your computer and use it in GitHub Desktop.
var isIphone = false,
isAndroidPhone = false,
isTierTablet = false,
isTierIphone = false,
isTierRichCss = false,
isTierGenericMobile = false,
engineWebKit = "webkit",
deviceIphone = "iphone",
deviceIpod = "ipod",
deviceIpad = "ipad",
deviceMacPpc = "macintosh",
deviceAndroid = "android",
deviceGoogleTV = "googletv",
deviceXoom = "xoom",
deviceHtcFlyer = "htc_flyer",
deviceNuvifone = "nuvifone",
deviceSymbian = "symbian",
deviceS60 = "series60",
deviceS70 = "series70",
deviceS80 = "series80",
deviceS90 = "series90",
deviceWinPhone7 = "windows phone os 7",
deviceWinMob =
"windows ce",
deviceWindows = "windows",
deviceIeMob = "iemobile",
devicePpc = "ppc",
enginePie = "wm5 pie",
deviceBB = "blackberry",
vndRIM = "vnd.rim",
deviceBBStorm = "blackberry95",
deviceBBBold = "blackberry97",
deviceBBTour = "blackberry96",
deviceBBCurve = "blackberry89",
deviceBBTorch = "blackberry 98",
deviceBBPlaybook = "playbook",
devicePalm = "palm",
deviceWebOS = "webos",
engineBlazer = "blazer",
engineXiino = "xiino",
deviceKindle = "kindle",
vndwap = "vnd.wap",
wml = "wml",
deviceBrew = "brew",
deviceDanger = "danger",
deviceHiptop = "hiptop",
devicePlaystation =
"playstation",
deviceNintendoDs = "nitro",
deviceNintendo = "nintendo",
deviceWii = "wii",
deviceXbox = "xbox",
deviceArchos = "archos",
engineOpera = "opera",
engineNetfront = "netfront",
engineUpBrowser = "up.browser",
engineOpenWeb = "openweb",
deviceMidp = "midp",
uplink = "up.link",
engineTelecaQ = "teleca q",
devicePda = "pda",
mini = "mini",
mobile = "mobile",
mobi = "mobi",
maemo = "maemo",
maemoTablet = "tablet",
linux = "linux",
qtembedded = "qt embedded",
mylocom2 = "com2",
manuSonyEricsson = "sonyericsson",
manuericsson = "ericsson",
manuSamsung1 = "sec-sgh",
manuSony = "sony",
manuHtc = "htc",
svcDocomo = "docomo",
svcKddi = "kddi",
svcVodafone = "vodafone",
disUpdate = "update",
uagent = navigator.userAgent.toLowerCase();
function DetectIphone() {
return uagent.search(deviceIphone) > -1 ? DetectIpad() || DetectIpod() ? false : true : false
}
function DetectIpod() {
return uagent.search(deviceIpod) > -1 ? true : false
}
function DetectIpad() {
return uagent.search(deviceIpad) > -1 && DetectWebkit() ? true : false
}
function DetectIphoneOrIpod() {
return uagent.search(deviceIphone) > -1 || uagent.search(deviceIpod) > -1 ? true : false
}
function DetectIos() {
return DetectIphoneOrIpod() || DetectIpad() ? true : false
}
function DetectAndroid() {
if (uagent.search(deviceAndroid) > -1 || DetectGoogleTV()) return true;
return uagent.search(deviceHtcFlyer) > -1 ? true : false
}
function DetectAndroidPhone() {
if (DetectAndroid() && uagent.search(mobile) > -1) return true;
return uagent.search(deviceHtcFlyer) > -1 ? true : false
}
function DetectAndroidTablet() {
if (uagent.search(deviceHtcFlyer) > -1) return false;
return DetectAndroid() && !(uagent.search(mobile) > -1) ? true : false
}
function DetectAndroidWebKit() {
return DetectAndroid() && DetectWebkit() ? true : false
}
function DetectGoogleTV() {
return uagent.search(deviceGoogleTV) > -1 ? true : false
}
function DetectWebkit() {
return uagent.search(engineWebKit) > -1 ? true : false
}
function DetectS60OssBrowser() {
return DetectWebkit() ? uagent.search(deviceS60) > -1 || uagent.search(deviceSymbian) > -1 ? true : false : false
}
function DetectSymbianOS() {
return uagent.search(deviceSymbian) > -1 || uagent.search(deviceS60) > -1 || uagent.search(deviceS70) > -1 || uagent.search(deviceS80) > -1 || uagent.search(deviceS90) > -1 ? true : false
}
function DetectWindowsPhone7() {
return uagent.search(deviceWinPhone7) > -1 ? true : false
}
function DetectWindowsMobile() {
if (DetectWindowsPhone7()) return false;
if (uagent.search(deviceWinMob) > -1 || uagent.search(deviceIeMob) > -1 || uagent.search(enginePie) > -1) return true;
if (uagent.search(devicePpc) > -1 && !(uagent.search(deviceMacPpc) > -1)) return true;
return uagent.search(manuHtc) > -1 && uagent.search(deviceWindows) > -1 ? true : false
}
function DetectBlackBerry() {
if (uagent.search(deviceBB) > -1) return true;
return uagent.search(vndRIM) > -1 ? true : false
}
function DetectBlackBerryTablet() {
return uagent.search(deviceBBPlaybook) > -1 ? true : false
}
function DetectBlackBerryWebKit() {
return DetectBlackBerry() && uagent.search(engineWebKit) > -1 ? true : false
}
function DetectBlackBerryTouch() {
return DetectBlackBerry() && (uagent.search(deviceBBStorm) > -1 || uagent.search(deviceBBTorch) > -1) ? true : false
}
function DetectBlackBerryHigh() {
if (DetectBlackBerryWebKit()) return false;
return DetectBlackBerry() ? DetectBlackBerryTouch() || uagent.search(deviceBBBold) > -1 || uagent.search(deviceBBTour) > -1 || uagent.search(deviceBBCurve) > -1 ? true : false : false
}
function DetectBlackBerryLow() {
return DetectBlackBerry() ? DetectBlackBerryHigh() || DetectBlackBerryWebKit() ? false : true : false
}
function DetectPalmOS() {
return uagent.search(devicePalm) > -1 || uagent.search(engineBlazer) > -1 || uagent.search(engineXiino) > -1 ? DetectPalmWebOS() ? false : true : false
}
function DetectPalmWebOS() {
return uagent.search(deviceWebOS) > -1 ? true : false
}
function DetectGarminNuvifone() {
return uagent.search(deviceNuvifone) > -1 ? true : false
}
function DetectSmartphone() {
if (DetectIphoneOrIpod()) return true;
if (DetectAndroidPhone()) return true;
if (DetectS60OssBrowser()) return true;
if (DetectSymbianOS()) return true;
if (DetectWindowsMobile()) return true;
if (DetectWindowsPhone7()) return true;
if (DetectBlackBerry()) return true;
if (DetectPalmWebOS()) return true;
if (DetectPalmOS()) return true;
if (DetectGarminNuvifone()) return true;
return false
}
function DetectArchos() {
return uagent.search(deviceArchos) > -1 ? true : false
}
function DetectBrewDevice() {
return uagent.search(deviceBrew) > -1 ? true : false
}
function DetectDangerHiptop() {
return uagent.search(deviceDanger) > -1 || uagent.search(deviceHiptop) > -1 ? true : false
}
function DetectMaemoTablet() {
if (uagent.search(maemo) > -1) return true;
return uagent.search(maemoTablet) > -1 && uagent.search(linux) > -1 ? true : false
}
function DetectSonyMylo() {
return uagent.search(manuSony) > -1 ? uagent.search(qtembedded) > -1 || uagent.search(mylocom2) > -1 ? true : false : false
}
function DetectOperaMobile() {
return uagent.search(engineOpera) > -1 ? uagent.search(mini) > -1 || uagent.search(mobi) > -1 ? true : false : false
}
function DetectSonyPlaystation() {
return uagent.search(devicePlaystation) > -1 ? true : false
}
function DetectNintendo() {
return uagent.search(deviceNintendo) > -1 || uagent.search(deviceWii) > -1 || uagent.search(deviceNintendoDs) > -1 ? true : false
}
function DetectXbox() {
return uagent.search(deviceXbox) > -1 ? true : false
}
function DetectGameConsole() {
if (DetectSonyPlaystation()) return true;
if (DetectNintendo()) return true;
return DetectXbox() ? true : false
}
function DetectKindle() {
return uagent.search(deviceKindle) > -1 ? true : false
}
function DetectMobileQuick() {
if (DetectTierTablet()) return false;
if (DetectSmartphone()) return true;
if (uagent.search(deviceMidp) > -1 || DetectBrewDevice()) return true;
if (DetectOperaMobile()) return true;
if (uagent.search(engineNetfront) > -1) return true;
if (uagent.search(engineUpBrowser) > -1) return true;
if (uagent.search(engineOpenWeb) > -1) return true;
if (DetectDangerHiptop()) return true;
if (DetectMaemoTablet()) return true;
if (DetectArchos()) return true;
if (uagent.search(devicePda) > -1 && !(uagent.search(disUpdate) > -1)) return true;
if (uagent.search(mobile) > -1) return true;
if (DetectKindle()) return true;
return false
}
function DetectMobileLong() {
if (DetectMobileQuick()) return true;
if (DetectGameConsole()) return true;
if (DetectSonyMylo()) return true;
if (uagent.search(manuSamsung1) > -1 || uagent.search(manuSonyEricsson) > -1 || uagent.search(manuericsson) > -1) return true;
if (uagent.search(svcDocomo) > -1) return true;
if (uagent.search(svcKddi) > -1) return true;
if (uagent.search(svcVodafone) > -1) return true;
return false
}
function DetectTierTablet() {
return DetectIpad() || DetectAndroidTablet() || DetectBlackBerryTablet() ? true : false
}
function DetectTierIphone() {
if (DetectIphoneOrIpod()) return true;
if (DetectAndroidPhone()) return true;
if (DetectBlackBerryWebKit() && DetectBlackBerryTouch()) return true;
if (DetectPalmWebOS()) return true;
if (DetectGarminNuvifone()) return true;
return DetectMaemoTablet() ? true : false
}
function DetectTierRichCss() {
if (DetectMobileQuick()) {
if (DetectTierIphone()) return false;
if (DetectWebkit()) return true;
if (DetectS60OssBrowser()) return true;
if (DetectBlackBerryHigh()) return true;
if (DetectWindowsPhone7()) return true;
if (DetectWindowsMobile()) return true;
return uagent.search(engineTelecaQ) > -1 ? true : false
} else return false
}
function DetectTierOtherPhones() {
return DetectMobileLong() ? DetectTierIphone() || DetectTierRichCss() ? false : true : false
}
function InitDeviceScan() {
isIphone = DetectIphoneOrIpod();
isAndroidPhone = DetectAndroidPhone();
isTierIphone = DetectTierIphone();
isTierTablet = DetectTierTablet();
isTierRichCss = DetectTierRichCss();
isTierGenericMobile = DetectTierOtherPhones()
}
InitDeviceScan();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment