MDN may have intermittent access issues April 18 13:00 - April 19 01:00 UTC. See whistlepig.mozilla.org for all notifications.

mozilla

Compare Revisions

Browser detection using the user agent

Change Revisions

Revision 17922:

Revision 17922 by wbamberg on

Revision 331163:

Revision 331163 by Gerv on

Title:
Browser detection using the user agent
Browser detection using the user agent
Slug:
Browser_detection_using_the_user_agent
Browser_detection_using_the_user_agent
Tags:
NeedsContent, "Web Development"
"NeedsContent", "Web Development"
Content:

Revision 17922
Revision 331163
n27        Look, or ask, in specialized forums: you're unlikely to bn27        Look, or ask, in specialized forums: you're unlikely to b
>e the first to hit this problem. Also experts, or simply people w>e the first to hit this problem. Also experts, or simply people w
>ith another point of view, can give you ideas for working around >ith another point of view, can give you ideas for working around 
>the bug. You can start by checking if this bug has been reported >the bug. If the problem seems uncommon, it's worth checking if th
>to the browser vendor; don't hesitate to asks on forum or to repo>is bug has been reported to the browser vendor via their bug trac
>rt it on their bug tracking system (<a class="link-https" href="h>king system (<a class="link-https" href="https://bugzilla.mozilla
>ttps://bugzilla.mozilla.org" title="https://bugzilla.mozilla.org">.org" title="https://bugzilla.mozilla.org">Mozilla</a>; <a class=
>>Mozilla</a>; <a class="external" href="http://bugs.webkit.org" t>"external" href="http://bugs.webkit.org" title="http://bugs.webki
>itle="http://bugs.webkit.org">WebKit</a>; <a class="link-https" h>t.org">WebKit</a>; <a class="link-https" href="https://bugs.opera
>ref="https://bugs.opera.com/" title="https://bugs.opera.com/">Ope>.com/" title="https://bugs.opera.com/">Opera</a>). Browser makers
>ra</a>) This step may seem unhelpful, but it is not! First, contr> do pay attention to bug reports, and the analysis may hint about
>ary to popular belief, browser makers pay attention to bug report> other work-arounds for the bug.
>s (though some may occasionally pass unnoticed through their tria 
>ging teams); second, analysis may hint about other work-arounds f 
>or the bug; third, without a bug report, the odds that the bug wi 
>ll be corrected in the future is lower. 
n33        Your site needs to use a specific Web feature that some bn33        Your site needs to use a specific Web feature that some b
>rowsers don't yet support, and you want to send those users to an>rowsers don't yet support, and you want to send those users to an
> older Web site with fewer features but that you know will work. > older Web site with fewer features but that you know will work. 
>This is the worst reason to use user agent detection, because odd>This is the worst reason to use user agent detection, because odd
>s are eventually all the other browsers will catch up. You should>s are eventually all the other browsers will catch up. You should
> do your best to avoid using user agent sniffing in this scenario> do your best to avoid using user agent sniffing in this scenario
>.>, and do feature detection instead.
n53        Feature detection is where you don't try to figure out whn53        Feature detection is where you don't try to figure out wh
>ich browser is rendering your page, but instead you check to see >ich browser is rendering your page, but instead you check to see 
>if the specific feature you need is available. If it's not, you u>if the specific feature you need is available. If it's not, you u
>se a fallback. You should, of course, never use feature detection>se a fallback. However, never use feature detection in the rare c
> to try to determine which browser you're using, since other brow>ases when you actually want browser detection, since other browse
>sers may implement the feature in the future, but differently. Bu>rs may implement the feature in the future, but differently. Bugs
>gs caused by this can be insidiously hard to find and fix.> caused by this can be insidiously hard to find and fix.
n59        This design technique involves developing your Web site in59        This design technique involves developing your Web site i
>layers, using a bottom-up approach, starting with a simpler lay>'layers', using a bottom-up approach, starting with a simpler l
>er and improving the capabilities of the site in successive layer>ayer and improving the capabilities of the site in successive lay
>s, each using more features.>ers, each using more features.
nn78      When people say they want "browser detection", often they a
 >ctually want "rendering engine detection". Do you actually want t
 >o detect Firefox, as opposed to SeaMonkey, or Chrome as opposed t
 >o Chromium? Or do you actually simply want to see if the browser 
 >is using the Gecko or the WebKit rendering engine? If this is wha
 >t you need, see further down the page.
79    </p>
80    <p>
n90            Must containsn93            Must contain
n93            Must not containsn96            Must not contain
n211      Here again, be sure to take the right token for the browsern214      Here again, be sure to take the right token for the browser
> you are looking for, as there is no guarantee that other will co> you are looking for, as there is no guarantee that others will c
>ntain a valid number.>ontain a valid number.
n217      As seen earlier, in most cases, looking for the rendering en220      As seen earlier, in most cases, looking for the rendering e
>ngine is a better way to go. It allows not to exclude less known >ngine is a better way to go. It allows you not to exclude less kn
>browsers build on the same engine that famous ones. Browsers shar>own browsers build on the same engine that famous ones. Browsers 
>ing a common rendering engine will display a page in the same way>sharing a common rendering engine will display a page in the same
>: it is often a fair assumption that what will work in one will w> way: it is often a fair assumption that what will work in one wi
>ork in the other.>ll work in the other.
218    </p>
219    <p>221    </p>
222    <p>
220      There are five major rendering engines: Trident, Gecko, Pre223      There are four major rendering engines: Trident, Gecko, Pre
>sto, and WebKit. As sniffing the rendering engines names is commo>sto, and WebKit. As sniffing the rendering engines names is commo
>n, a lot of user agents added other rendering names to trigger de>n, a lot of user agents added other rendering names to trigger de
>tection. It is therefore important to pay attention not to trigge>tection. It is therefore important to pay attention not to trigge
>r false-positive when detecting the rendering engine.>r false-positives when detecting the rendering engine.
n245            Pay attention, Gecko version is not necessarily storen248            &nbsp;
>d in that token 
n287      Most rendering engine put the version number in the <em>Renn290      Most rendering engine put the version number in the <em>Ren
>deringEngine/VersionNumber</em> token, with the notable exception>deringEngine/VersionNumber</em> token, with the notable exception
> of Gecko. Gecko, up to version 14 (?), put the version number in> of Gecko. Gecko puts the Gecko version number in the comment par
> the comment part of the User Agent after the <code>rv:</code> st>t of the User Agent after the <code>rv:</code> string. From Gecko
>ring. From Gecko 14, for mobile version, it also put this value i> 14 for the mobile version and Gecko 17 for the desktop version, 
>n the <code>Gecko/version</code> token (previous version put ther>it also puts this value in the <code>Gecko/version</code> token (
>e the build date, then a fixed date called the GeckoTrail). Deskt>previous version put there the build date, then a fixed date call
>op version still don't store it there, though it may change in th>ed the GeckoTrail).
>e future. 
n293      The Operating System is given in most Useragent, it is an en296      The Operating System is given in most User Agent strings (a
>ntry, that is a fixed string between two semi-colons, in the comm>lthough not web-focussed platforms like Firefox OS), but the form
>ent part of the User Agent. These strings are specific for each b>at varies a lot. It is a fixed string between two semi-colons, in
>rowsers. They indicates the OS, but also often its version and in> the comment part of the User Agent. These strings are specific f
>formation on the relying hardware (32 or 64 bits, or Intel/PPC fo>or each browsers. They indicates the OS, but also often its versi
>r Mac).>on and information on the relying hardware (32 or 64 bits, or Int
 >el/PPC for Mac).
n298    <h3 id="Mobile,_Tablet_or_Desktop">n301    <h3 id="Mobile.2C_Tablet_or_Desktop">
t375      Today, looking for these strings is the only way to know tht378      So, in summary, we recommend looking for the string "Mobi" 
>at the device runs on a mobile device (resp. a tablet) before ser>anywhere in the User Agent to detect a mobile device. If the devi
>ving the HTML.>ce is large enough that it's not marked with "Mobi", you should s
 >erve your desktop site (which, as a best practice, should support
 > touch input anyway, as more desktop machines are appearing with 
 >touchscreens).

Back to History