1

I have a question about the order that the script is loading by the browser. I need to know what is the best way client side, to redirect people to a mobile web site.

I mean. If i want to put the mobile detection script client side in the <head>, with no function the mobile will download all the page before executing the script and redirect the client?

(function(a){jQuery.browser.mobile=/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|wp7|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))})(navigator.userAgent||navigator.vendor||window.opera);
if (jQuery.browser.mobile) {

    var url = document.URL;

    if (url.indexOf("?mobile=false") != -1) {
        setCookie("cookieMobile","full");
    }
    else { 
        var nmscookie = getCookie("cookieMobile");
        if (nmscookie == "full") {
            setCookie("cookieMobile","full");
        }
        else {
            location.href="/mobile"; 
        }

    }
}
Cédric Boivin
  • 10,854
  • 13
  • 57
  • 98
  • Ah, so this is how some websites totally hijack by back button. – 000 Mar 22 '13 at 14:33
  • 1
    it's better to do the detection in server side by checking the user agent then return different URL to user based on the agent value. – Shuping Mar 22 '13 at 14:36
  • I got cache server, so i can't detect server side. – Cédric Boivin Mar 22 '13 at 15:02
  • 1
    check by yourself: http://jsbin.com/opopih/1 open network tab in chrome dev tools and see what requests have been made until you hit ok in the alert – a0viedo Mar 22 '13 at 18:03
  • So with your test a0viedo all the javascript are downloaded, but css, and images are download avec the script execution. Thanks for you answer. – Cédric Boivin Mar 22 '13 at 19:37

1 Answers1

1

Yes. The page content will be downloaded.

The browser must be sure it is a valid html document and all that. After it downloads it, then the parsing and execution starts. But as I see in your script, it will download at least the HTML page and JQuery before it is able to decide if it wants to switch to mobile site or not.

Like the comments suggest, it's better to check that server side.

TheBrain
  • 5,528
  • 2
  • 25
  • 26