Simple javascript mobile OS detector
11 Oct 2010I’ve searched the web for a simple way to detect all the different mobile devices ( iphones, andriod, etc..) with javascript but couldn’t find anything decent.
This is what i’ve come up with and has worked for me
/*
 * Simple javascript mobile OS / iphone/ android detector
 *
 * License: GPLv3+
 * Author: justin.kelly.org.au
 *
 */
$(document).ready(function() {
	var deviceIphone = "iphone";
	var deviceIpod = "ipod";
	var devicePalm = "palm";
	var deviceS60 = "series60";
	var deviceSymbian = "symbian";
	var engineWebKit = "webkit";
	var deviceAndroid = "android";
	var deviceWinMob = "windows ce";
	var deviceWinPhone = "windows phone";
	var deviceBB = "blackberry";
	//Initialize our user agent string to lower case.
	var uagent = navigator.userAgent.toLowerCase();
	//**************************
	// Detects if the current device is an iPhone.
	function DetectIphone()
	{
	   if (uagent.search(deviceIphone) > -1)
		  return true;
	   else
		  return false;
	}
	//**************************
	// Detects if the current device is an iPod Touch.
	function DetectIpod()
	{
	   if (uagent.search(deviceIpod) > -1)
		  return true;
	   else
		  return false;
	}
	//**************************
	// Detects if the current device is an iPhone or iPod Touch.
	function DetectIphoneOrIpod()
	{
		if (DetectIphone())
		   return true;
		else if (DetectIpod())
		   return true;
		else
		   return false;
	}	
	//**************************
	// Detects if the current browser is the S60 Open Source Browser.
	// Screen out older devices and the old WML browser.
	function DetectS60OssBrowser()
	{
	   if (uagent.search(engineWebKit) > -1)
	   {
		 if ((uagent.search(deviceS60) > -1 || 
			  uagent.search(deviceSymbian) > -1))
			return true;
		 else
			return false;
	   }
	   else
		  return false;
	}
	//**************************
	// Detects if the current device is an Android OS-based device.
	function DetectAndroid()
	{
	   if (uagent.search(deviceAndroid) > -1)
		  return true;
	   else
		  return false;
	}
	//**************************
	// Detects if the current device is an Android OS-based device and
	//   the browser is based on WebKit.
	function DetectAndroidWebKit()
	{
	   if (DetectAndroid())
	   {
		 if (DetectWebkit())
			return true;
		 else
			return false;
	   }
	   else
		  return false;
	}
	//**************************
	// Detects if the current browser is a Windows Mobile device.
	function DetectWindowsMobile()
	{
	   if (uagent.search(deviceWinMob) > -1)
		  return true;
	   else
		  return false;
	}
	//**************************
	// Detects if the current browser is a Windows Phone OS 7+ Mobile device.
	function DetectWindowsPhone()
	{
	   if (uagent.search(deviceWinPhone) > -1)
		  return true;
	   else
		  return false;
	}
	//**************************
	// Detects if the current browser is a BlackBerry of some sort.
	function DetectBlackBerry()
	{
	   if (uagent.search(deviceBB) > -1)
		  return true;
	   else
		  return false;
	}
	//**************************
	// Detects if the current browser is on a PalmOS device.
	function DetectPalmOS()
	{
	   if (uagent.search(devicePalm) > -1)
		  return true;
	   else
		  return false;
	}
	function DetectMobileOS()
	{
		if (DetectIphoneOrIpod() || DetectS60OssBrowser() || DetectAndroid() || DetectAndroidWebKit() || DetectWindowsMobile() || DetectBlackBerry() || DetectPalmOS())
		{
			return true
		} else {
			return false
		}
		
	}
	if (DetectMobileOS())
	{
		//do stuff
			
	}
});	
Let me know if you find any issues or have enhancements
