mozilla

Compare Revisions

Browser Detection and Cross Browser Support

Change Revisions

Revision 59882:

Revision 59882 by madarche on

Revision 59883:

Revision 59883 by knobulous on

Title:
Browser Detection and Cross Browser Support
Browser Detection and Cross Browser Support
Slug:
Browser_Detection_and_Cross_Browser_Support
Browser_Detection_and_Cross_Browser_Support
Tags:
css, DOM, HTML, NeedsTechnicalReview, Cross-browser_Development, NeedsUpdate, "Web Development"
css, DOM, HTML, NeedsTechnicalReview, Cross-browser_Development, NeedsUpdate, "Web Development"
Content:

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="http://www.gnome.org/projects/epiphany/">Epiphany</a>, <a cla>ternal" href="http://www.gnome.org/projects/epiphany/">Epiphany</
>ss="external" href="http://galeon.sourceforge.net/">Galeon</a>, <>a>, <a class="external" href="http://galeon.sourceforge.net/">Gal
>a class="external" href="http://caminobrowser.org/">Camino</a>, <>eon</a>, <a class="external" href="http://caminobrowser.org/">Cam
>a class="external" href="http://kmeleon.sourceforge.net/">Kmeleon>ino</a>, <a class="external" href="http://kmeleon.sourceforge.net
></a>, and <a class="external" href="http://www.seamonkey-project.>/">Kmeleon</a>, and <a class="external" href="http://www.seamonke
>org/">SeaMonkey</a>.>y-project.org/">SeaMonkey</a>.
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="
>http://www.w3.org/MarkUp/">HTML</a> was very simple, not standard>http://www.w3.org/MarkUp/">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
 >egies.
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
>f="http://www.mozilla.org/docs/web-developer/sniffer/browser_type>ref="http://www.mozilla.org/docs/web-developer/sniffer/browser_ty
>.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
 >e.
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="http://www.mozilla.org/docs/web->s in the <a class="external" href="http://www.mozilla.org/docs/we
>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
>ffer.>niffer.
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
 >p.
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="http://www.mozilla.org/b>er agent. (see <a class="external" href="http://www.mozilla.org/b
>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
 >m>
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
 >e:
n292      Mozilla-based browsers (such as Firefox), <a class="externan295      Mozilla-based browsers (such as Firefox), <a class="externa
>l" href="http://msdn.microsoft.com/library/default.asp?url=/libra>l" href="http://msdn.microsoft.com/library/default.asp?url=/libra
>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="http://msdn.microsoft.com/library/">DHTML object model</a>" href="http://msdn.microsoft.com/library/">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="http://www.iht.com">site</a>n1095      This <a class="external" href="http://www.iht.com">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