adding mobile browser detection, rule selection, into a ruleset

65 Views Asked by At

I would like to add functionality to a ruleset that fires a distinct rule based on whether or not the browser is mobile or not. (one rule fires for a standard browser, a different rule fires for a mobile browser) I know that the browser detection can be done any number of ways, but my first inclination would be with javascript.

Any thoughts on how to start with this?

1

There are 1 best solutions below

0
Steve Nay On BEST ANSWER

You can use the useragent object, like this:

rule detect_agent {
    select when pageview ".*"
    pre {
        browser_name = useragent:browser_name();
        browser_version = useragent:browser_version();
        os = useragent:os();
        os_type = useragent:os_type();
        os_version = useragent:os_version();
        full_useragent = useragent:string();
        message = <<
            <p><strong>Information about your browser:</strong></br />
            <em>Browser name:</em> #{browser_name}</br />
            <em>Browser version:</em> #{browser_version}</br />
            <em>Operating system:</em> #{os}</br />
            <em>OS type:</em> #{os_type}</br />
            <em>OS version:</em> #{os_version}</br /></p>
            <p>#{full_useragent}</p>
        >>;
    }
    append("body", message);
}

You might have to do some parsing of your own, though, since the browser_name and os may or may not be correct. Here's what it looks like in Chrome on a Mac (you can test it using this URL in any browser):

Chrome, Mac

Here's what it looks like in Safari on an iPad:

Safari, iPad

Do some research into what the UserAgent strings look like for the browsers you care about. Then you can use the useragent:string() function together with match() to determine what to do with it. (If you want an example of how to do that, let me know.)