Buying Fix for Mobile Redirect Script Needed

Discussion in 'Programming' started by adamjblakey, Jul 5, 2012.

  1. #1
    I have a redirect script located here: http://www.devicedetect.co/redirect.js.php it is a redirect script which is working fine for 90% of mobiles however some android phones including the new samsung galaxy s3 it is not redirecting when being used.

    If you can fix this let me know a price and the job is yours.
     
    adamjblakey, Jul 5, 2012 IP
  2. Einheijar

    Einheijar Well-Known Member

    Messages:
    539
    Likes Received:
    13
    Best Answers:
    3
    Trophy Points:
    165
    As Seller:
    100% - 0
    As Buyer:
    100% - 0
    #2
    That's probably because it detects the screen size in pixels, some browsers fake larger sizes than they can actually display.
     
    Einheijar, Jul 5, 2012 IP
  3. Einheijar

    Einheijar Well-Known Member

    Messages:
    539
    Likes Received:
    13
    Best Answers:
    3
    Trophy Points:
    165
    As Seller:
    100% - 0
    As Buyer:
    100% - 0
    #3
    Try something like

    
    (function (a, b) {
        if (/android|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(ad|hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|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|\-[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|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) window.location = b
    })(navigator.userAgent || navigator.vendor || window.opera, 'http://google.com');
    
    Code (markup):
    replace google.com with your own URL
     
    Einheijar, Jul 5, 2012 IP
  4. adamjblakey

    adamjblakey Active Member

    Messages:
    1,121
    Likes Received:
    10
    Best Answers:
    0
    Trophy Points:
    80
    As Seller:
    100% - 0
    As Buyer:
    100% - 0
    #4
    Thanks for that, I need to work with what I have though as it allows me to call the script from my main site with a get variable telling the script where to redirect to. Also it allows me to return to the main site with ?redirect=false and a cookie will be set for 10mins so the redirect won't happen while this cookie exists.
     
    adamjblakey, Jul 5, 2012 IP
  5. Einheijar

    Einheijar Well-Known Member

    Messages:
    539
    Likes Received:
    13
    Best Answers:
    3
    Trophy Points:
    165
    As Seller:
    100% - 0
    As Buyer:
    100% - 0
    #5
    
    var mobileURL = "";
    var detectmobile = {
        redirectCallback: null,
        defaultMobileURL: null,
        mobileSiteDomainIdentifiers: ["m", "mobi"],
        thresholdWidthInPixels: 970,
        cookieName: "detectmobilesticky",
        forceWebParameter: "redirect=false",
        forceMobileParameter: "redirect=true",
        stripDomains: ["www", "www2", "www3", "m", "mobi"],
        process: function () {
            var a = window.location.href;
            var b = this.splitURLParameters(a);
            var c = this.readCookie(this.cookieName);
            if (this.forceWebParameter in b) {
                this.createCookie("forceWeb", "true");
                this.eraseCookie("forceMobile")
            }
            if (this.forceMobileParameter in b) {
                this.createCookie("forceMobile", "true");
                this.eraseCookie("forceWeb")
            }
            var d = this.readCookie("forceWeb");
            var e = this.readCookie("forceMobile");
            if (d == "true") {
                return
            }
            if (e == "true") {
                var f = this.getRedirectTarget("mobile", a);
                this.performRedirect(f)
            }
            if (this.detectMobile()) {
                var f = this.getRedirectTarget("mobile", a);
                this.performRedirect(f)
            }
        },
        getRedirectTarget: function (a, b) {
            var c = null;
            if (this.redirectCallback) {
                c = this.redirectCallback(a, b)
            } else {
                if (a == "mobile") {
                    c = this.defaultMobileURL
                }
            }
            if (!c) {
                throw "Cannot redirect to " + a + " because target URL cannot be resolved by detectmobile.js"
            }
            return c
        },
        performRedirect: function (a) {
            if (a == window.location.href) {
                window.location.reload();
                return
            }
            window.location = a
        },
        replaceDomainName: function (a, b, c, d) {
            var e;
            if (a.substring(0, 4) != "http") {
                throw "Only absolute http/https URLs supported"
            }
            var f = a.split("/");
            if (f.length < 2) {
                throw "Cannot understand:" + a
            }
            var g = f[2];
            hostparts = g.split(":");
            var h = hostparts[0];
            for (e = 0; e < this.stripDomains.length; e++) {
                var i = this.stripDomains[e];
                if (h.indexOf(i + ".") == 0) {
                    h = h.substring(i.length + 1);
                    break
                }
            }
            if (c) {
                b = b + "." + h
            }
            if (hostparts.length > 1) {
                hostparts = [b, hostparts[1]]
            } else {
                hostparts = [b]
            }
            var g = hostparts.join(":");
            var j = [f[0], f[1], g];
            for (var e = 3; e < f.length; e++) {
                j.push(f[e])
            }
            return j.join("/")
        },
        addURLParameter: function (a, b) {
            var c = mobilize.getUrlVars(a);
            var d = a.split("?", 1)[0];
            d += "?";
            var e = [];
            for (var f = 0; f < c.length; f++) {
                var g = c[f];
                var h = c[g];
                e.push(g + "=" + h)
            }
            e.push(b);
            d += e.join("&");
            return d
        },
        splitURLParameters: function (a) {
            if (!this._urlvars) {
                this._urlvars = {}
            }
            if (!a) {
                a = window.location.href
            }
            if (this._urlvars[a]) {
                return this._urlvars[a]
            }
            var b = [],
                c;
            if (a.indexOf("#") >= 0) {
                a = a.slice(0, a.indexOf("#"))
            }
            var d = a.slice(a.indexOf("?") + 1).split("&");
            for (var e = 0; e < d.length; e++) {
                c = d[e];
                b.push(c);
                b[c] = c
            }
            this._urlvars[a] = b;
            return b
        },
        createCookie: function (a, b, c) {
            var d = "";
            if (c) {
                var e = new Date;
                e.setTime(e.getTime() + 1800000);
                d = "; expires=" + e.toGMTString()
            }
            document.cookie = a + "=" + b + d + "; path=/"
        },
        readCookie: function (a) {
            var b = a + "=";
            var c = document.cookie.split(";");
            for (var d = 0; d < c.length; d++) {
                var e = c[d];
                while (e.charAt(0) === " ") {
                    e = e.substring(1, e.length)
                }
                if (e.indexOf(b) === 0) {
                    return e.substring(b.length, e.length)
                }
            }
            return null
        },
        eraseCookie: function (a) {
            this.createCookie(a, "", - 1)
        },
        detectMobile: function () {
          if (navigator.userAgent) {
            var a = navigator.userAgent;
          } else if (navigator.vendor){
            var a = navigator.userAgent;
          } else if(window.opera) {
            var a = window.opera;
          } else {
            return false;
          }
            if (/android|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(ad|hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|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|\-[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|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
                return true;
            } else {
                return false;
            }
    
        },
        getScreenDimensions: function () {
            return {
                width: window.screen.availWidth,
                height: window.screen.availHeight
            }
        },
        isOnMobileSite: function () {
            var a = window.location.hostname;
            var b = a.split(".");
            for (var c = 0; c < b.length; c++) {
                for (var d = 0; d < this.mobileSiteDomainIdentifiers.length; d++) {
                    if (b[c] == this.mobileSiteDomainIdentifiers[d]) {
                        return true
                    }
                }
            }
            return false
        }
    };
    detectmobile.defaultMobileURL = mobileURL;
    detectmobile.process();
    
    Code (markup):
    That outta do it
     
    Einheijar, Jul 5, 2012 IP