Compare Revisions

Browser Detection and Cross Browser Support

Change Revisions

Revision 59882:

Revision 59882 by madarche on

Revision 59883:

Revision 59883 by knobulous on

Browser Detection and Cross Browser Support
Browser Detection and Cross Browser Support
css, DOM, HTML, NeedsTechnicalReview, Cross-browser_Development, NeedsUpdate, "Web Development"
css, DOM, HTML, NeedsTechnicalReview, Cross-browser_Development, NeedsUpdate, "Web Development"

Revision 59882
Revision 59883
n26      In an <i>ideal</i> world, we could author HTML, XML, CSS ann26      In an <em>ideal</em> world, we could author HTML, XML, CSS 
>d JavaScript and only worry about the W3C and ECMA standards. How>and JavaScript and only worry about the W3C and ECMA standards. H
>ever, we don't quite live in such a world yet. Due to bugs, incom>owever, we don't quite live in such a world yet. Due to bugs, inc
>plete implementations of the standards and legacy browsers, web d>omplete implementations of the standards and legacy browsers, web
>evelopers must be able to determine which browser a visitor is us> developers must be able to determine which browser a visitor is 
>ing and provide the appropriate content and scripting code path.>using and provide the appropriate content and scripting code path
n32      This article is intended to provide an overview of browser n32      This article is intended to provide an overview of browser 
>detection strategies and best practices. For more specific Gecko >detection strategies and best practices. For more specific Gecko 
>recommendations, please see the <a href="en/Gecko_Compatibility_H>recommendations, please see the <a href="/en/Gecko_Compatibility_
>andbook">Gecko Compatibility Handbook</a>>Handbook" title="en/Gecko_Compatibility_Handbook">Gecko Compatibi
 >lity Handbook</a>
n38      Although many web developers are aware of Firefox, Mozilla,n38      Although many web developers are aware of Firefox, Mozilla,
> and Netscape browsers, far fewer are aware that these browsers a> and Netscape browsers, far fewer are aware that these browsers a
>re members of an entire family of user agents based upon the <b>G>re members of an entire family of user agents based upon the <str
>ecko layout engine</b> which includes the commercial browser Comp>ong>Gecko layout engine</strong> which includes the commercial br
>uServe 7, and open source browsers such as <a class="external" hr>owser CompuServe 7, and open source browsers such as <a class="ex
>ef="">Epiphany</a>, <a cla>ternal" href="">Epiphany</
>ss="external" href="">Galeon</a>, <>a>, <a class="external" href="">Gal
>a class="external" href="">Camino</a>, <>eon</a>, <a class="external" href="">Cam
>a class="external" href="">Kmeleon>ino</a>, <a class="external" href="
></a>, and <a class="external" href="http://www.seamonkey-project.>/">Kmeleon</a>, and <a class="external" href="http://www.seamonke
39    </p>
40    <p>39    </p>
40    <p>
41      Gecko was designed from the ground up to be compliant with 41      Gecko was designed from the ground up to be compliant with 
>the W3C HTML, W3C CSS, W3C XML, W3C DOM, and ECMAScript (JavaScri>the W3C HTML, W3C CSS, W3C XML, W3C DOM, and ECMAScript (JavaScri
>pt) standards. It also includes compatibility features which allo>pt) standards. It also includes compatibility features which allo
>w it to reasonably handle <i>legacy</i> content which was develop>w it to reasonably handle <em>legacy</em> content which was devel
>ed for earlier generations of browsers such as Netscape Navigator>oped for earlier generations of browsers such as Netscape Navigat
> 4 as well as features which provide compatibility with Internet >or 4 as well as features which provide compatibility with Interne
>Explorer 5 and 6. Unlike other browsers, Gecko is truly cross pla>t Explorer 5 and 6. Unlike other browsers, Gecko is truly cross p
>tform and provides consistent behavior across all supported opera>latform and provides consistent behavior across all supported ope
>ting systems.>rating systems.
n56      In the earliest days of the web, <a class="external" href="n56      In the earliest days of the web, <a class="external" href="
>">HTML</a> was very simple, not standard>">HTML</a> was very simple, not standard
>ized and did not include any support for client side scripting. H>ized and did not include any support for client side scripting. H
>TML itself was not standardized until HTML 2.0 was introduced in >TML itself was not standardized until HTML 2.0 was introduced in 
>late 1995 and it did not even include tables. Browser vendors suc>late 1995 and it did not even include tables. Browser vendors suc
>h as Netscape and Microsoft competed to add compelling <i>feature>h as Netscape and Microsoft competed to add compelling <em>featur
>s</i> to the HTML they supported in their browsers in order to pr>es</em> to the HTML they supported in their browsers in order to 
>ovide the richest most compelling content to their users and to e>provide the richest most compelling content to their users and to
>ntice web authors to support them. The abilities of browsers to s> entice web authors to support them. The abilities of browsers to
>upport the latest and greatest content changed on an almost daily> support the latest and greatest content changed on an almost dai
> basis.>ly basis.
n65      The most common approach at this time was to distinguish usn65      The most common approach at this time was to distinguish us
>er agents by <i>vendor</i> and <i>version</i> using the reported >er agents by <em>vendor</em> and <em>version</em> using the repor
>user agent string. Although this approach was considered reasonab>ted user agent string. Although this approach was considered reas
>le at the time, this approach caused problems for browser vendors>onable at the time, this approach caused problems for browser ven
> right from the beginning. The original Netscape browsers used a >dors right from the beginning. The original Netscape browsers use
>user agent string which began with the code name for the Netscape>d a user agent string which began with the code name for the Nets
> browser followed by it's version number, e.g. <code>Mozilla/vers>cape browser followed by its version number, e.g. <code>Mozilla/v
>ion</code> followed by a comment token which gave additional info>ersion</code> followed by a comment token which gave additional i
>rmation regarding the operating system being used, etc. Since the>nformation regarding the operating system being used, etc. Since 
> earliest browser detection techniques were based upon looking fo>the earliest browser detection techniques were based upon looking
>r a Netscape based browser and only provided customized content t> for a Netscape based browser and only provided customized conten
>o browsers which used the <code>Mozilla/version</code> user agent>t to browsers which used the <code>Mozilla/version</code> user ag
> string, other browser vendors standardized on using <code>Mozill>ent string, other browser vendors standardized on using <code>Moz
>a/version</code> to signal that they were compatible with a parti>illa/version</code> to signal that they were compatible with a pa
>cular Netscape version. Since other browsers <i>pretended</i> to >rticular Netscape version. Since other browsers <em>pretended</em
>be Netscape browsers and encoded their version information in a n>> to be Netscape browsers and encoded their version information i
>on-standard fashion in the user agent comment area, the task of d>n a non-standard fashion in the user agent comment area, the task
>etermining which browser was being used became more complicated t> of determining which browser was being used became more complica
>han it should have been.>ted than it should have been.
66    </p>
67    <p>66    </p>
67    <p>
68      Netscape Navigator 2 introduced the ability to run JavaScri68      Netscape Navigator 2 introduced the ability to run JavaScri
>pt in web browsers. As browser evolution continued, differences i>pt in web browsers. As browser evolution continued, differences i
>n the implementation of scripting and the objects supported by br>n the implementation of scripting and the objects supported by br
>owsers appeared. Web authors were no longer limited to detecting >owsers appeared. Web authors were no longer limited to detecting 
>browsers on their web servers, but could now execute scripts clie>browsers on their web servers, but could now execute scripts clie
>nt side (in the browser itself) which could be used to distinguis>nt side (in the browser itself) which could be used to distinguis
>h browsers. One of the earliest approaches to client side browser>h browsers. One of the earliest approaches to client side browser
> detection involved testing whether the browser supported particu> detection involved testing whether the browser supported particu
>lar <i>objects</i>. An example of this approach involved testing >lar <em>objects</em>. An example of this approach involved testin
>for the existence of the <code>document.images</code> object.>g for the existence of the <code>document.images</code> object.
69    </p>
70    <p>69    </p>
71      While <i>object based detection</i> was used in some circum
>stances, many web authors continued to use the <i>vendor/version< 
>/i> approach to distinguishing web browsers in their client side  
>scripts. Since the user agent string was exposed as a property of 
> the <code>navigator</code> object (e.g. <code>navigator.userAgen 
>t</code>), many web authors used the same logic in their client s 
>ide scripts as they had used earlier in their server side browser 
> detection. In addition to <code>navigator.userAgent</code> other 
> properties such as <code>appName</code> and <code>appVersion</co 
>de> were available in the <code>navigator</code> object which cou 
>ld be used in browser <i>vendor/version</i> detection strategies. 
72    </p>70    <p>
71      While <em>object based detection</em> was used in some circ
 >umstances, many web authors continued to use the <em>vendor/versi
 >on</em> approach to distinguishing web browsers in their client s
 >ide scripts. Since the user agent string was exposed as a propert
 >y of the <code>navigator</code> object (e.g. <code>navigator.user
 >Agent</code>), many web authors used the same logic in their clie
 >nt side scripts as they had used earlier in their server side bro
 >wser detection. In addition to <code>navigator.userAgent</code> o
 >ther properties such as <code>appName</code> and <code>appVersion
 ></code> were available in the <code>navigator</code> object which
 > could be used in browser <em>vendor/version</em> detection strat
73    <p>72    </p>
73    <p>
74      The classic example of this <i>vendor/version</i> client si74      The classic example of this <em>vendor/version</em> client 
>de detection strategy can be found in the <a class="external" hre>side detection strategy can be found in the <a class="external" h
>.html">Ultimate Browser Sniffer</a>. This script and variants of >pe.html">Ultimate Browser Sniffer</a>. This script and variants o
>it can be found today on many web sites where it is a common sour>f it can be found today on many web sites where it is a common so
>ce of detection problems.>urce of detection problems.
75    </p>
76    <p>75    </p>
76    <p>
77      Netscape Navigator 4 and Internet Explorer 4 introduced the77      Netscape Navigator 4 and Internet Explorer 4 introduced the
> ability to manipulate HTML content in a browser (Dynamic HTML or> ability to manipulate HTML content in a browser (Dynamic HTML or
> <a href="en/DHTML">DHTML</a>) rather than on the web server and > <a href="/en/DHTML" title="en/DHTML">DHTML</a>) rather than on t
>began the introduction of support for <a href="en/CSS">CSS</a> to>he web server and began the introduction of support for <a href="
> style content. This generation of browser, in addition to sharin>/en/CSS" title="en/CSS">CSS</a> to style content. This generation
>g several features which were not available in earlier versions, > of browser, in addition to sharing several features which were n
>each implemented their own (incompatible) competing abilities to >ot available in earlier versions, each implemented their own (inc
>manipulate content in a web page.>ompatible) competing abilities to manipulate content in a web pag
78    </p>
79    <p>78    </p>
79    <p>
80      Since each vendor's browser implemented different objects t80      Since each vendor's browser implemented different objects t
>o perform DHTML, web authors began to use object detection to dis>o perform DHTML, web authors began to use object detection to dis
>tinguish <i>vendor/version</i> through the existence of particula>tinguish <em>vendor/version</em> through the existence of particu
>r JavaScript objects. The existence of <code>document.layers</cod>lar JavaScript objects. The existence of <code>document.layers</c
>e> was sufficient to be sure that the browser was Netscape Naviga>ode> was sufficient to be sure that the browser was Netscape Navi
>tor 4 while the existence of <code>document.all</code> was suffic>gator 4 while the existence of <code>document.all</code> was suff
>ient to be sure that the browser was Microsoft Internet Explorer >icient to be sure that the browser was Microsoft Internet Explore
>4. An implicit assumption by many web authors around this time wa>r 4. An implicit assumption by many web authors around this time 
>s the there were only two types of browser available... Netscape >was the there were only two types of browser available... Netscap
>Navigator and Microsoft Internet Explorer.>e Navigator and Microsoft Internet Explorer.
81    </p>
82    <p>81    </p>
82    <p>
83      These strategies of classifying browsers by <i>vendor/versi83      These strategies of classifying browsers by <em>vendor/vers
>on</i>, assuming that the only browsers being used where either N>ion</em>, assuming that the only browsers being used where either
>etscape Navigator 4 or Internet Explorer 4 <b>failed</b> when alt> Netscape Navigator 4 or Internet Explorer 4 <strong>failed</stro
>ernative browsers such as those based upon Gecko were introduced.>ng> when alternative browsers such as those based upon Gecko were
> Many of the problems reported in the press regarding Gecko's ina> introduced. Many of the problems reported in the press regarding
>bility to display content were directly related to inadequate, in> Gecko's inability to display content were directly related to in
>appropriate browser detection strategies.>adequate, inappropriate browser detection strategies.
84    </p>
85    <p>84    </p>
85    <p>
86      A final note on <i>vendor/version</i> strategies. A web dev86      A final note on <em>vendor/version</em> strategies. A web d
>eloper who fully utilizes the browser detection and distinctions >eveloper who fully utilizes the browser detection and distinction
>in the <a class="external" href=">s in the <a class="external" href="
>developer/sniffer/browser_type.html">Ultimate Browser Sniffer</a>>b-developer/sniffer/browser_type.html">Ultimate Browser Sniffer</
> will produce code which uses code forks for many browsers and ve>a> will produce code which uses code forks for many browsers and 
>rsions. Imagine attempting to maintain a web site which uses many>versions. Imagine attempting to maintain a web site which uses ma
> of the browser variables available from the Ultimate Browser Sni>ny of the browser variables available from the Ultimate Browser S
n133      <b>Detecting browsers using this level of detail is unworkan133      <strong>Detecting browsers using this level of detail is un
>ble, unmaintainable and violates the basic principles of web auth>workable, unmaintainable and violates the basic principles of web
>oring!</b> I strongly advise everyone to avoid this trap.> authoring!</strong> I strongly advise everyone to avoid this tra
nn144    <p>
145      &nbsp;
146    </p>
n180      Note how the above example assumed that any browser that wan183      Note how the above example assumed that any browser that wa
>s not Internet Explorer was Navigator 4 and attempted to use <i>L>s not Internet Explorer was Navigator 4 and attempted to use <em>
>ayers</i>. This is a common source of problems when using browser>Layers</em>. This is a common source of problems when using brows
>s based upon Gecko as well as Opera. A similar error can be seen >ers based upon Gecko as well as Opera. A similar error can be see
>in the following example:>n in the following example:
n196      Netscape 6 was the first commercial browser released based n199      Netscape 6 was the first commercial browser released based 
>upon Gecko. Due to a lack of communication and understanding, man>upon Gecko. Due to a lack of communication and understanding, man
>y sites have created inappropriate detection strategies based upo>y sites have created inappropriate detection strategies based upo
>n the Netscape 6 user agent string. Netscape 6's user agent strin>n the Netscape 6 user agent string. Netscape 6's user agent strin
>g follows the HTTP standards for specifying the version of the us>g follows the HTTP standards for specifying the version of the us
>er agent. (see <a class="external" href=">er agent. (see <a class="external" href="
>uild/revised-user-agent-strings.html">Mozilla user-agent strings<>uild/revised-user-agent-strings.html">Mozilla user-agent strings<
>/a> and <a href="en/Gecko_User_Agent_Strings">Gecko User Agent St>/a> and <a href="/en/Gecko_User_Agent_Strings" title="en/Gecko_Us
>rings</a>)>er_Agent_Strings">Gecko User Agent Strings</a>)
n202      The first vendor/version (Mozilla/5.0) indicates that Netscn205      The first vendor/version (Mozilla/5.0) indicates that Netsc
>ape 6 is a <i>fifth</i> generation browser and is not identical t>ape 6 is a <em>fifth</em> generation browser and is not identical
>o earlier browsers. All Gecko based browsers currently report Moz> to earlier browsers. All Gecko based browsers currently report M
>illa/5.0 as their primary version although no other browser does >ozilla/5.0 as their primary version although no other browser doe
>so at the moment. Hopefully when other browser vendors achieve th>s so at the moment. Hopefully when other browser vendors achieve 
>e same level of standards support as Gecko and begin to drop supp>the same level of standards support as Gecko and begin to drop su
>ort for legacy browsers, they too will begin to report version 5.>pport for legacy browsers, they too will begin to report version 
> Assuming that only Gecko will use Mozilla/5.0 will cause your br>5. Assuming that only Gecko will use Mozilla/5.0 will cause your 
>owser detection logic to fail as soon as another browser vendor r>browser detection logic to fail as soon as another browser vendor
>eleases a browser which reports Mozilla/5.0.> releases a browser which reports Mozilla/5.0.
n226      Using JavaScript Objects to Determine <i>vendor/version</i>n229      Using JavaScript Objects to Determine <em>vendor/version</e
227    </h4>
228    <p>230    </h4>
231    <p>
229      As we already discussed, a common approach in the past was 232      As we already discussed, a common approach in the past was 
>to use objects to classify browsers by <i>vendor/version</i>. A c>to use objects to classify browsers by <em>vendor/version</em>. A
>ommon type of detection which originally was written to support o> common type of detection which originally was written to support
>nly Netscape Navigator 4 and Internet Explorer 4 might look like:> only Netscape Navigator 4 and Internet Explorer 4 might look lik
n292      Mozilla-based browsers (such as Firefox), <a class="externan295      Mozilla-based browsers (such as Firefox), <a class="externa
>l" href=">l" href="
>ry/en-us/dnie60/html/cssenhancements.asp">Internet Explorer 6</a>>ry/en-us/dnie60/html/cssenhancements.asp">Internet Explorer 6</a>
> on Windows, and Internet Explorer 5 for Macintosh all support <i> on Windows, and Internet Explorer 5 for Macintosh all support <e
>>DOCTYPE switching</i>. This is a technique where these browsers >m>DOCTYPE switching</em>. This is a technique where these browser
>can be switched from <a href="en/Mozilla's_Quirks_Mode">"Quirks" >s can be switched from <a href="/en/Mozilla's_Quirks_Mode" title=
>mode</a> (which emulates buggy implementations in earlier generat>"en/Mozilla's_Quirks_Mode">"Quirks" mode</a> (which emulates bugg
>ion browsers) to Standards mode (which more strictly adhers to th>y implementations in earlier generation browsers) to Standards mo
>e Standards). For new content, we recommend that you use a DOCTYP>de (which more strictly adhers to the Standards). For new content
>E which will invoke Standards mode in Gecko and Internet Explorer>, we recommend that you use a DOCTYPE which will invoke Standards
> 6. This will ensure that your designs work similarly in these br> mode in Gecko and Internet Explorer 6. This will ensure that you
>owsers as well as in any other browsers which support the Standar>r designs work similarly in these browsers as well as in any othe
>ds.>r browsers which support the Standards.
n298      Always provide content and code paths for unknown browsers.n301      Always provide content and code paths for unknown browsers.
> The recommended approach is to assume that any unknown browser s> The recommended approach is to assume that any unknown browser s
>upports the basic standards of HTML and CSS and to a certain exte>upports the basic standards of HTML and CSS and to a certain exte
>nt JavaScript and the W3C DOM. This will guarantee that your cont>nt JavaScript and the W3C DOM. This will guarantee that your cont
>ent will be supported today and in the future by <b>any</b> brows>ent will be supported today and in the future by <strong>any</str
>er which supports the standards.>ong> browser which supports the standards.
n304      Authoring content which is standards compliant is the easien307      Authoring content which is standards compliant is the easie
>st way to support the widest range of user agents and to decrease>st way to support the widest range of user agents and to decrease
> your maintenance costs. While it is not always possible to avoid> your maintenance costs. While it is not always possible to avoid
> <i>vendor/version</i> specific differences between browsers, the> <em>vendor/version</em> specific differences between browsers, t
> use of such features and the distinction between browsers based >he use of such features and the distinction between browsers base
>on <i>vendor/version</i> should be strictly limited to those area>d on <em>vendor/version</em> should be strictly limited to those 
>s where it is still required.>areas where it is still required.
n313      There are <b>legitimate</b> reasons to use the user agent sn316      There are <strong>legitimate</strong> reasons to use the us
>tring (or the <code>navigator</code> object) to determine exactly>er agent string (or the <code>navigator</code> object) to determi
> what vendor, version or operating system is being used. Many fin>ne exactly what vendor, version or operating system is being used
>ancial sites (banks, online stock trading firms, etc) have very s>. Many financial sites (banks, online stock trading firms, etc) h
>trict policies with respect to what browsers they support. This i>ave very strict policies with respect to what browsers they suppo
>s due to the history of security exploits that have been discover>rt. This is due to the history of security exploits that have bee
>ed in older browsers. If you have the need to only allow specific>n discovered in older browsers. If you have the need to only allo
> versions of browsers to use your secure site, then the user agen>w specific versions of browsers to use your secure site, then the
>t string and the related information from the <code>navigator</co> user agent string and the related information from the <code>nav
>de> object can be very useful.>igator</code> object can be very useful.
n370      Since browsers such as Netscape Navigator 4 and Internet Exn373      Since browsers such as Netscape Navigator 4 and Internet Ex
>plorer 4 do not support some of the most recent additions to the >plorer 4 do not support some of the most recent additions to the 
>JavaScript (ECMAScript) standard, it is often necessary to limit >JavaScript (ECMAScript) standard, it is often necessary to limit 
>the use of advanced JavaScript features such as <i>exception</i>the use of advanced JavaScript features such as <em>exception</em
>processing. One approach is to require that users of browsers whi>> processing. One approach is to require that users of browsers w
>ch do not support the level of JavaScript used in your content to>hich do not support the level of JavaScript used in your content 
> <b>turn off</b> JavaScript in order to be able to use your conte>to <strong>turn off</strong> JavaScript in order to be able to us
>nt. You can do this by providing an error message for users of ol>e your content. You can do this by providing an error message for
>der browsers as well as alternative content contained in NOSCRIPT> users of older browsers as well as alternative content contained
> tags.> in NOSCRIPT tags.
n417      The choice of scripting language is determined by the LANGUn420      The choice of scripting language is determined by the LANGU
>AGE attribute of the script tag. Internet Explorer 4 and above ca>AGE attribute of the script tag. Internet Explorer 4 and above ca
>n support a variety of script languages. The most common are <i>V>n support a variety of script languages. The most common are <em>
>BSCRIPT</i> and <i>JavaScript</i>. Internet Explorer also uses <i>VBSCRIPT</em> and <em>JavaScript</em>. Internet Explorer also use
>>JSCRIPT</i> as a synonym for JavaScript. Since other browsers do>s <em>JSCRIPT</em> as a synonym for JavaScript. Since other brows
> not support the language attribute <i>VBSCRIPT</i> or <i>JSCRIPT>ers do not support the language attribute <em>VBSCRIPT</em> or <e
></i> you can use these languages when you wish certain scripts to>m>JSCRIPT</em> you can use these languages when you wish certain 
> only be executed by Internet Explorer 4 and above.>scripts to only be executed by Internet Explorer 4 and above.
n511      <br>n514      &nbsp;
n521        <b>Gecko is standards conformant</b>. Gecko supports manyn524        <strong>Gecko is standards conformant</strong>. Gecko sup
> more standards than Navigator 4 and implements them correctly un>ports many more standards than Navigator 4 and implements them co
>like Navigator 4.>rrectly unlike Navigator 4.
n524        <b>Gecko does not support Layers</b>. Navigator 4 introdun527        <strong>Gecko does not support Layers</strong>. Navigator
>ced the Layer API which it used to manipulate content and which f> 4 introduced the Layer API which it used to manipulate content a
>ormed the basis of DHTML in Navigator 4. Layers however were not >nd which formed the basis of DHTML in Navigator 4. Layers however
>accepted by the W3C either in HTML or in the DOM. Since Gecko's m> were not accepted by the W3C either in HTML or in the DOM. Since
>ission was to be the most standards conformant browser possible, > Gecko's mission was to be the most standards conformant browser 
>Layers were not supported. This lack of backwards compatibility h>possible, Layers were not supported. This lack of backwards compa
>as been the cause of many problems for web authors, but can easil>tibility has been the cause of many problems for web authors, but
>y be overcome through proper authoring and browser detection stra> can easily be overcome through proper authoring and browser dete
>tegies. As the use of Navigator 4 decreases and more authors use >ction strategies. As the use of Navigator 4 decreases and more au
>the standards in their content, Layers and the problems they caus>thors use the standards in their content, Layers and the problems
>e will disappear.> they cause will disappear.
n531      Gecko implements a number of Internet Explorer only proprien534      Gecko implements a number of Internet Explorer only proprie
>tary features especially with respect to their <a class="external>tary features especially with respect to their <a class="external
>" href="">DHTML object model</a>" href="">DHTML object model</a
>>. Gecko's support for a number of IE's features has steadily inc>>. Gecko's support for a number of IE's features has steadily inc
>reased since the introduction of Netscape 6 in November 2000. The>reased since the introduction of Netscape 6 in November 2000. The
> best approach to take advantage of these IE compatibility featur> best approach to take advantage of these IE compatibility featur
>es in Gecko is to use object based feature detection. This will a>es in Gecko is to use object based feature detection. This will a
>utomatically use any such features in Gecko if they are available>utomatically use any such features in Gecko if they are available
> in the version of Gecko being used. See the <a href="en/DOM_Clie> in the version of Gecko being used. See the <a href="/en/DOM_Cli
>nt_Object_Cross-Reference">DOM Client Object Cross-Reference</a> >ent_Object_Cross-Reference" title="en/DOM_Client_Object_Cross-Ref
>for more details on which Internet Explorer's objects and propert>erence">DOM Client Object Cross-Reference</a> for more details on
>ies are supported by which version of Gecko.> which Internet Explorer's objects and properties are supported b
 >y which version of Gecko.
532    </p>
533    <p>535    </p>
536    <p>
534      A number of Internet Explorer features <b>are not supported537      A number of Internet Explorer features <strong>are not supp
> by Gecko</b>. These include the <code>window.event</code> object>orted by Gecko</strong>. These include the <code>window.event</co
>, behaviors, filters, transitions, and ActiveX.>de> object, behaviors, filters, transitions, and ActiveX.
n540      Unless you specifically need to detect if Gecko is being usn543      Unless you specifically need to detect if Gecko is being us
>ed, do not use these methods. These methods should only be used i>ed, do not use these methods. These methods should only be used i
>n circumstances which can not be handled by using <i>object featu>n circumstances which can not be handled by using <em>object feat
>re detection</i> such as when specific versions of Gecko must be >ure detection</em> such as when specific versions of Gecko must b
>excluded for security reasons.>e excluded for security reasons.
541    </p>
542    <p>544    </p>
545    <p>
543      <b>Note:</b> For client side detection, we recommend using 546      <strong>Note:</strong> For client side detection, we recomm
>the <code>navigator</code> object and it's properties. All of the>end using the <code>navigator</code> object and it's properties. 
> information reported in the <code>navigator</code> is also avail>All of the information reported in the <code>navigator</code> is 
>able in the user agent string which can be used in server side si>also available in the user agent string which can be used in serv
>tuations.>er side situations.
n654      <b>Note:</b> The branch tag is a string and can contain morn657      <strong>Note:</strong> The branch tag is a string and can c
>e than single digits in any particular level. For example, it is >ontain more than single digits in any particular level. For examp
>conceivable that someday there will exist branch tags similar to >le, it is conceivable that someday there will exist branch tags s
>2.2.0 and 2.12.36. Since these values are strings, it is not poss>imilar to 2.2.0 and 2.12.36. Since these values are strings, it i
>ible to use relative string comparisons to determine which branch>s not possible to use relative string comparisons to determine wh
> tag came later. In our example, branch 2.2.0 was created before >ich branch tag came later. In our example, branch 2.2.0 was creat
>2.12.36 however comparing these values as strings shows '2.2.0' &>ed before 2.12.36 however comparing these values as strings shows
>gt; '2.12.36'. The JavaScript function geckoGetRv() provides one > '2.2.0' &gt; '2.12.36'. The JavaScript function geckoGetRv() pro
>solution to this problem by converting the branch tag in the user>vides one solution to this problem by converting the branch tag i
> agent string into a floating point number where each level of th>n the user agent string into a floating point number where each l
>e branch tag is considered as a number from 0-99.>evel of the branch tag is considered as a number from 0-99.
n902      If you are like me, you learn best from examples. Studying n905      If you are like me, you learn best from examples. Studying 
>how other authors use browser detection and cross browser coding >how other authors use browser detection and cross browser coding 
>techniques is the <b>best</b> way to learn.>techniques is the <strong>best</strong> way to learn.
n908      This example illustrates the use of <i>feature detection</in911      This example illustrates the use of <em>feature detection</
>>. Note that Gecko 1.0 (Netscape 7) and later implement the propr>em>. Note that Gecko 1.0 (Netscape 7) and later implement the pro
>ietary Internet Explorer feature clientWidth while Netscape 6 did>prietary Internet Explorer feature clientWidth while Netscape 6 d
> not. In this example, Netscape 7 and Internet Explorer 5+ will a>id not. In this example, Netscape 7 and Internet Explorer 5+ will
>utomatically use clientWidth while Netscape Navigator 4, Netscape> automatically use clientWidth while Netscape Navigator 4, Netsca
> 6, CompuServe 7 <i>and Opera</i> will use innerWidth.>pe 6, CompuServe 7 <em>and Opera</em> will use innerWidth.
909    </p>
910    <p>912    </p>
913    <p>
911      Compare how you would have had to code this using <i>vendor914      Compare how you would have had to code this using <em>vendo
>/version</i> based detection approaches.>r/version</em> based detection approaches.
n932      This example also illustrates the use of <i>feature detectin935      This example also illustrates the use of <em>feature detect
>on</i> and shows the complications that can arise from the non st>ion</em> and shows the complications that can arise from the non 
>andard implementations in other browsers.>standard implementations in other browsers.
n1020      Ask yourself this: "Is supporting <i>non-standard browsers<n1023      Ask yourself this: "Is supporting <em>non-standard browsers
>/i> worth the development and maintenance costs?"></em> worth the development and maintenance costs?"
n1092      This <a class="external" href="">site</a>n1095      This <a class="external" href="">site</a>
> illustrates many of the techniques described in this article. Th> illustrates many of the techniques described in this article. Th
>ey use <i>downlevel</i> pages for less capable browsers combined >ey use <em>downlevel</em> pages for less capable browsers combine
>with <i>object based feature</i> detection to produce a compellin>d with <em>object based feature</em> detection to produce a compe
>g and interesting site.>lling and interesting site.
t1110      I would like to leave you with this thought. In the past, ut1113      I would like to leave you with this thought. In the past, u
>sers did not have the choice of picking a browser which implement>sers did not have the choice of picking a browser which implement
>ed the standards however today they do have a choice. There is no>ed the standards however today they do have a choice. There is no
> compelling reason for anyone in the world to continue to use a b> compelling reason for anyone in the world to continue to use a b
>rowser which does not support the standards. However, as long as >rowser which does not support the standards. However, as long as 
>web developers continue to code work arounds for these older brow>web developers continue to code work arounds for these older brow
>sers, users will not have a compelling reason to upgrade. By ceas>sers, users will not have a compelling reason to upgrade. By ceas
>ing to support older browsers, you can provide a reason for users>ing to support older browsers, you can provide a reason for users
> to upgrade. This will benefit not only them, but yourself as wel> to upgrade. This will benefit not only them, but yourself as wel
>l. Supporting <b>only standards based browsers</b> can reduce dev>l. Supporting <strong>only standards based browsers</strong> can 
>elopment and maintanance costs as well as increase the <i>dynamic>reduce development and maintanance costs as well as increase the 
> and compelling content</i> which will attract visitors and incre><em>dynamic and compelling content</em> which will attract visito
>ase your revenue. The choice is yours... <b>Decide to support the>rs and increase your revenue. The choice is yours... <strong>Deci
> standards today!</b>>de to support the standards today!</strong>

Back to History