mobilebrowserjquery-mobile

Ways to differentiate between desktop user and mobile users


My team at work is trying to develop a web site for both desktop and mobile and we want certain function to only be available for mobile users. We have been brainstorming of different methods to detect mobile and desktop users and have brainstorm the following ideas:

  1. Check for screensize , if its less than certain size, we can safely assume it is desktop

  2. Check user browser user agent string

  3. Capability testing

Are there any other methods to detect between Desktop and Mobile, if it's possible please list the pros and cons of the method also.


Solution

  • Intro

    There are few available solutions but I will only name open-source ones, at least solutions mostly used with a jQuery/jQuery Mobile. Also be warned, this topic has the potential to start a war. On one side we have a proponents of server side detection with their community maintained databases and on the other side we have client side advocates with their browser sniffing.

    Solution 1

    WURFL

    Solution 2

    Modernizr - Server

    Solution 3

    Modernizer - Client

    Solution 4

    JavaScript based browser sniffing

    <script type="text/javascript">     
        var agent = navigator.userAgent;      
        var isWebkit = (agent.indexOf("AppleWebKit") > 0);      
        var isIPad = (agent.indexOf("iPad") > 0);      
        var isIOS = (agent.indexOf("iPhone") > 0 || agent.indexOf("iPod") > 0);     
        var isAndroid = (agent.indexOf("Android")  > 0);     
        var isNewBlackBerry = (agent.indexOf("AppleWebKit") > 0 && agent.indexOf("BlackBerry") > 0);     
        var isWebOS = (agent.indexOf("webOS") > 0);      
        var isWindowsMobile = (agent.indexOf("IEMobile") > 0);     
        var isSmallScreen = (screen.width < 767 || (isAndroid && screen.width < 1000));     
        var isUnknownMobile = (isWebkit && isSmallScreen);     
        var isMobile = (isIOS || isAndroid || isNewBlackBerry || isWebOS || isWindowsMobile || isUnknownMobile);     
        var isTablet = (isIPad || (isMobile && !isSmallScreen));     
    
        if ( isMobile && isSmallScreen && document.cookie.indexOf( "mobileFullSiteClicked=") < 0 ) mobileRedirect(); 
    </script>
    

    Solution 5

    CSS Media Queries

    This used to be a great and easy solution but not any more, mainly because mobile devices reached and surpass desktop computer screen sizes.

    /* Smartphones (portrait and landscape) ----------- */
    @media only screen 
    and (min-device-width : 320px) 
    and (max-device-width : 480px) {
    /* Styles */
    }
    
    /* Smartphones (landscape) ----------- */
    @media only screen 
    and (min-width : 321px) {
    /* Styles */
    }
    
    /* Smartphones (portrait) ----------- */
    @media only screen 
    and (max-width : 320px) {
    /* Styles */
    }
    
    /* iPads (portrait and landscape) ----------- */
    @media only screen 
    and (min-device-width : 768px) 
    and (max-device-width : 1024px) {
    /* Styles */
    }
    
    /* iPads (landscape) ----------- */
    @media only screen 
    and (min-device-width : 768px) 
    and (max-device-width : 1024px) 
    and (orientation : landscape) {
    /* Styles */
    }
    
    /* iPads (portrait) ----------- */
    @media only screen 
    and (min-device-width : 768px) 
    and (max-device-width : 1024px) 
    and (orientation : portrait) {
    /* Styles */
    }
    
    /* Desktops and laptops ----------- */
    @media only screen 
    and (min-width : 1224px) {
    /* Styles */
    }
    
    /* Large screens ----------- */
    @media only screen 
    and (min-width : 1824px) {
    /* Styles */
    }
    
    /* iPhone 4 ----------- */
    @media
    only screen and (-webkit-min-device-pixel-ratio : 1.5),
    only screen and (min-device-pixel-ratio : 1.5) {
    /* Styles */
    }
    

    Solution 6

    Detect mobile browser

    Never used this one personally

    More info

    More of this is described in my other answer, find it here.