<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta content="Common javascript feature tests" name="description">
<meta content="cft, javascript feature tests, feature detection, object detection, browser sniffing, browser bugs, browser detection" name="keywords">
<meta content="Juriy 'kangax' Zaytsev" name="author">
<title>Javascript feature tests</title>
<link rel="stylesheet" href="master.css" type="text/css" media="screen">
</head>
<body>
<h1>Common feature tests:</h1>
<div>
<p>
Too many times I see Javascript authors fail into the trap of browser sniffing.
Feature detection is known to be a much better practice when it comes to creating robust scripts for general web.
Hopefully, this collection can serve as a repository of most common (non-trivial) feature tests.
Most of the tests require no presence of <code>document.body</code> and so can be run at any time.
Otherwise, a note about <code>document.body</code> requirement is mentioned in test description.
All of the tests assume the presence of global <code>document</code> property. Everything else is tested before it's being used.
</p>
<p>
For CSS support detection see <a href="style.html" title="Tests for CSS support"><code>getStyleProperty</code> and tests</a>.<br>
For event support detection, see <a href="http://yura.thinkweb2.com/isEventSupported/" title="Tests for event support"><code>isEventSupported</code> and tests</a>.
</p>
<p>
<strong>Tested browsers</strong>:
Interner Explorer 5.5 - 8,
Firefox 1.5.0.12 - 3.5,
Opera 7.54 - 10b,
Safari 2.0.2 - 4,
Mobile Safari 3.2,
Chrome 0.4.154.29 - 3.0.192.0,
Camino 1.6.6 - 1.6.8,
Konqueror 4.2.2,
BlackBerry 9000 (Bold), 9530 (Storm)
</p>
<p>
Found an error or have a suggestion? <a href="mailto:kangax@gmail.com" title="author email">Please, tell me about it</a>
</p>
<p>Source is <a href="http://github.com/kangax/cft" title="CFT on GitHub">available on GitHub</a></p>
</div>
<span id="last-updated" class="dtstart">Last updated: <abbr class="dtstamp" title="20091008T110641">Oct. 8, 2009</abbr></span>
<h2>Features:</h2>
<table id="cft-data">
<thead>
<tr>
<th class="name">Name</th>
<th>Value</th>
<th>Affected Browsers</th>
<th>Info</th>
<th class="code">
Test code<br>
<span>
<a href="#" title="Show all test snippets" class="show-all">Show all</a> /
<a href="#" title="Hide all test snippets" class="hide-all">Hide all</a>
</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>IS_ELEMENT_TAGNAME_UPPERCASED</td>
<td></td>
<td>-</td>
<td>
<a href="https://developer.mozilla.org/en/DOM/element.tagName" title="element.tagName on MDC">
<code>element.tagName</code> on MDC
</a>
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_ELEMENT_TAGNAME_UPPERCASED">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>ARRAY_PROTOTYPE_SLICE_CAN_CONVERT_NODELIST_TO_ARRAY</td>
<td></td>
<td>non-<abbr title="Internet Explorer">IE</abbr></td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="ARRAY_PROTOTYPE_SLICE_CAN_CONVERT_NODELIST_TO_ARRAY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>WINDOW_EVAL_EVALUATES_IN_GLOBAL_SCOPE</td>
<td></td>
<td>Firefox, Safari 3.2.1, Opera</td>
<td>Test whether <code>window.eval</code> evaluates string in global scope</td>
<td><a href="#" title="show test code" class="show-test-code" name="WINDOW_EVAL_EVALUATES_IN_GLOBAL_SCOPE">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_EVENT_METAKEY_PRESENT</td>
<td></td>
<td></td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_EVENT_METAKEY_PRESENT">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_EVENT_RELATEDTARGET_PRESENT</td>
<td></td>
<td></td>
<td>
<a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-MouseEvent-relatedTarget">
MouseEvent::relatedTarget
</a>
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_EVENT_RELATEDTARGET_PRESENT">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_EVENT_PREVENTDEFAULT_PRESENT</td>
<td></td>
<td>non-<abbr title="Internet Explorer">IE</abbr></td>
<td>
Test whether DOM L2 <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event-preventDefault" title="Dcoumentation for Event::preventDefault">Event::preventDefault</a> method is present on event object</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_EVENT_PREVENTDEFAULT_PRESENT">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_EVENT_SRCELEMENT_PRESENT</td>
<td></td>
<td><abbr title="Internet Explorer">IE</abbr>, Opera, Chrome, Safari 2+</td>
<td>
Test whether <a href="http://msdn.microsoft.com/en-us/library/ms534638(VS.85).aspx" title="Dcoumentation for Event::srcElement">Event::srcElement</a> is present on event object
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_EVENT_SRCELEMENT_PRESENT">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_NATIVE_HAS_ATTRIBUTE_PRESENT</td>
<td></td>
<td>-</td>
<td>
Check for
<strong>actual</strong>
presence of <a href="http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-ElHasAttr">Element::hasAttribute</a>.
The test should return proper result even if method was defined/removed by 3rd party scripts
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_NATIVE_HAS_ATTRIBUTE_PRESENT">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_POSITION_FIXED_SUPPORTED</td>
<td></td>
<td>-</td>
<td>
Check if <code>position:fixed;</code> is supported. Requires presence of <strong><code>document.body</code></strong>
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_POSITION_FIXED_SUPPORTED">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_CONTEXTMENU_EVENT_SUPPORTED</td>
<td></td>
<td>All except Opera <=10.a and Konqueror (4.2.2)</td>
<td>
Check if "contextmenu" event is supported.
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_CONTEXTMENU_EVENT_SUPPORTED">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>COMPUTED_STYLE_RETURNS_VALUES_FOR_STATICLY_POSITIONED_ELEMENTS</td>
<td></td>
<td>Opera 8.54+</td>
<td>
Computed style returns actual values for statically positioned elements, instead of 'auto'
</td>
<td><a href="#" title="show test code" class="show-test-code" name="COMPUTED_STYLE_RETURNS_VALUES_FOR_STATICLY_POSITIONED_ELEMENTS">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_RGBA_SUPPORTED</td>
<td></td>
<td>FF3+, Safari 3+</td>
<td>
Check whether RGBA is supported
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_RGBA_SUPPORTED">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_CSS_BORDER_RADIUS_SUPPORTED</td>
<td></td>
<td>WebKit-, Gecko- and KHTML- (newer) based</td>
<td>
Check whether <a href="http://www.w3.org/TR/css3-background/#the-border-radius">CSS3 border-radius property</a> is supported (or any of vendor proprietary extensions - "-moz-border-radius", "-webkit-border-radius", "-khtml-border-radius")
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_CSS_BORDER_RADIUS_SUPPORTED">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_CSS_TRANSFORMATION_SUPPORTED</td>
<td></td>
<td>Chrome, Firefox 3.1+</td>
<td>
<a href="http://webkit.org/specs/CSSVisualEffects/CSSTransforms.html">
CSSTransforms specs
</a>
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_CSS_TRANSFORMATION_SUPPORTED">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_CANVAS_SUPPORTED</td>
<td></td>
<td>Most of non-IE, Opera 9.x+</td>
<td>
Is <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html" title="Specs for canvas element">HTML5 canvas element</a> supported?
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_CANVAS_SUPPORTED">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>ELEMENT_CHILDREN_RETURNS_ELEMENT_NODES</td>
<td></td>
<td>Safari 2.x is buggy; IE returns comment nodes; Firefox <3.5 doesn't support `children` at all</td>
<td>
Is <a href="https://developer.mozilla.org/en/DOM/Element.children" title="Element::children docs on MDC"><code>Element::children</code></a> supported? If so, does it return element nodes only?
</td>
<td><a href="#" title="show test code" class="show-test-code" name="ELEMENT_CHILDREN_RETURNS_ELEMENT_NODES">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_CSS_ON</td>
<td></td>
<td></td>
<td>
Checks whether CSS is enabled. Requires presence of <strong><code>document.body</code></strong>. Note that certain "!important" declarations might cause this test to produce false positives.
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_CSS_ON">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_DOMFOCUSIN_SUPPORTED</td>
<td></td>
<td>Safari 4.x; Opera 9.5+ (possibly earlier too)</td>
<td>
Checks whether <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-uievents-h3" title="">DOMFocusIn event</a> is being fired on DIV element with <code>tabIndex = -1</code>. Only proceeds when tested element has <code>addEventListener</code>. Note that Safari <4 seems to only fire this event on natively focusable elements such as INPUT. The test can be easily customized to probe elements other than DIV. Requires presence of <strong><code>document.body</code></strong>
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_DOMFOCUSIN_SUPPORTED">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_QUIRKS_MODE</td>
<td></td>
<td></td>
<td>
Checks if browser is in quirks mode. Based on <a href="http://code.google.com/p/doctype/wiki/ArticleCompatMode" title="">technique by Google doctype</a>.
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_QUIRKS_MODE">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_STRICT_MODE_SUPPORTED</td>
<td></td>
<td></td>
<td>
Checks if ES5 strict mode is supported.
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_QUIRKS_MODE">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
</tbody>
</table>
<h2>Bugs:</h2>
<table id="cft-data-bugs">
<thead>
<tr>
<th>Name</th>
<th>Value</th>
<th>Affected Browsers</th>
<th>Info</th>
<th>Test code</th>
</tr>
</thead>
<tbody>
<tr>
<td>GETELEMENTSBYTAGNAME_RETURNS_COMMENT_NODES</td>
<td></td>
<td>IE</td>
<td>Test whether <code>getElementsByTagName</code> returns comments nodes</td>
<td><a href="#" title="show test code" class="show-test-code" name="GETELEMENTSBYTAGNAME_RETURNS_COMMENT_NODES">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_REGEXP_WHITESPACE_CHARACTER_CLASS_BUGGY</td>
<td></td>
<td>IE, Safari, Konqueror 4.2.2</td>
<td>
Test whether <code>/\s/</code> matches whitespace characters (<code>\t</code>,<code>\v</code>,<code>\f</code>, etc. including unicode ones).
See <a href="http://bclary.com/2004/11/07/#a-15.10.2.12" title="ECMA-262 15.10.2.12">15.10.2.12</a> and
<a href="http://thinkweb2.com/projects/prototype/whitespace-deviations/" title="whitespace deviations">whitespace deviations article</a>.
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_REGEXP_WHITESPACE_CHARACTER_CLASS_BUGGY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_STRING_PROTOTYPE_SPLIT_REGEXP_BUGGY</td>
<td></td>
<td>IE, Konqueror 4.2.2</td>
<td>
Test whether <code>String.prototype.split</code> works with regexp capturing groups properly
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_STRING_PROTOTYPE_SPLIT_REGEXP_BUGGY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>SETATTRIBUTE_IGNORES_NAME_ATTRIBUTE</td>
<td></td>
<td>IE <=7</td>
<td>
<code>name</code> attribute can not be changed at runtime in IE, see
<a href="http://msdn.microsoft.com/en-us/library/ms536389.aspx" title="article on MSDN">article on MSDN</a>
</td>
<td><a href="#" title="show test code" class="show-test-code" name="SETATTRIBUTE_IGNORES_NAME_ATTRIBUTE">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>ELEMENT_PROPERTIES_ARE_ATTRIBUTES</td>
<td></td>
<td>IE</td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="ELEMENT_PROPERTIES_ARE_ATTRIBUTES">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>QUERY_SELECTOR_IGNORES_CAPITALIZED_VALUES</td>
<td></td>
<td></td>
<td><a href="https://bugs.webkit.org/show_bug.cgi?id=19047">WebKit bug #19047</a></td>
<td><a href="#" title="show test code" class="show-test-code" name="QUERY_SELECTOR_IGNORES_CAPITALIZED_VALUES">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>STRING_PROTOTYPE_REPLACE_IGNORES_FUNCTIONS</td>
<td></td>
<td>Safari <=2.0.2</td>
<td>
<a href="https://bugs.webkit.org/show_bug.cgi?id=3294" title="WebKit bug #3294">WebKit bug #3294</a>
</td>
<td><a href="#" title="show test code" class="show-test-code" name="STRING_PROTOTYPE_REPLACE_IGNORES_FUNCTIONS">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>ARRAY_PROTOTYPE_CONCAT_ARGUMENTS_BUGGY</td>
<td></td>
<td>Opera <9.5</td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="ARRAY_PROTOTYPE_CONCAT_ARGUMENTS_BUGGY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>PROPERTIES_SHADOWING_DONTENUM_ARE_ENUMERABLE</td>
<td></td>
<td>IE</td>
<td>See <a href="https://developer.mozilla.org/En/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug" title="">JScript DontEnum bug description on MDC</a></td>
<td><a href="#" title="show test code" class="show-test-code" name="PROPERTIES_SHADOWING_DONTENUM_ARE_ENUMERABLE">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>PRE_ELEMENTS_IGNORE_NEWLINES</td>
<td></td>
<td>IE<=7, Opera 8.54+</td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="PRE_ELEMENTS_IGNORE_NEWLINES">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>SELECT_ELEMENT_INNERHTML_BUGGY</td>
<td></td>
<td>IE</td>
<td><a href="http://support.microsoft.com/kb/276228">Bug description on MSDN</a></td>
<td><a href="#" title="show test code" class="show-test-code" name="SELECT_ELEMENT_INNERHTML_BUGGY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>TABLE_ELEMENT_INNERHTML_BUGGY</td>
<td></td>
<td>IE, Konqueror 4.2.2</td>
<td>
<a href="http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx">innerHTML article on MSDN</a>
</td>
<td>
<a href="#" title="show test code" class="show-test-code" name="TABLE_ELEMENT_INNERHTML_BUGGY">show</a>
</td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING</td>
<td></td>
<td>IE</td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>DOCUMENT_GETELEMENTBYID_CONFUSES_IDS_WITH_NAMES</td>
<td></td>
<td>IE <=7, Opera <9.5</td>
<td><code>document.getElementById</code> returns elements with corresponding name attributes</td>
<td><a href="#" title="show test code" class="show-test-code" name="DOCUMENT_GETELEMENTBYID_CONFUSES_IDS_WITH_NAMES">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>DOCUMENT_GETELEMENTBYID_IGNORES_CASE</td>
<td></td>
<td>IE <=7</td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="DOCUMENT_GETELEMENTBYID_IGNORES_CASE">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>BUGGY_OFFSET_VALUES_FOR_STATIC_ELEMENTS_INSIDE_POSITIONED_ONES</td>
<td></td>
<td>IE <=7, Opera <8.54</td>
<td>Requires presence of <strong><code>document.body</code></strong></td>
<td><a href="#" title="show test code" class="show-test-code" name="BUGGY_OFFSET_VALUES_FOR_STATIC_ELEMENTS_INSIDE_POSITIONED_ONES">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_XPATH_POSITION_FUNCTION_BUGGY</td>
<td></td>
<td>Safari 3+, Opera 9.64+</td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_XPATH_POSITION_FUNCTION_BUGGY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_DOCUMENT_GETELEMENTSBYNAME_BUGGY</td>
<td></td>
<td>IE6+, Opera 8.54 (and possibly earlier) - 10a</td>
<td>Test whether <code>document.getElementsByName</code> returns elements with same-named ids. See <a href="http://msdn.microsoft.com/en-us/library/ms536438(VS.85).aspx" title="">MSDN article</a>.</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_DOCUMENT_GETELEMENTSBYNAME_BUGGY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>NAMED_FUNCTION_EXPRESSION_IDENTIFIER_LEAKS_ONTO_ENCLOSING_SCOPE</td>
<td></td>
<td>IE</td>
<td></td>
<td><a href="#" title="show test code" class="show-test-code" name="NAMED_FUNCTION_EXPRESSION_IDENTIFIER_LEAKS_ONTO_ENCLOSING_SCOPE">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>ARGUMENTS_INSTANCEOF_ARRAY</td>
<td></td>
<td>Opera</td>
<td>
<a href="http://opera.remcol.ath.cx/bugs/index.php?action=bug&id=326" title="Unofficial Opera bug">Opera bug #326 (Unofficial)</a>
</td>
<td><a href="#" title="show test code" class="show-test-code" name="ARGUMENTS_INSTANCEOF_ARRAY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_OVERFLOW_STYLE_BUGGY</td>
<td></td>
<td>Konqueror 4.2.2 (possibly earlier too)</td>
<td>
Konqueror (at least 4.2.2) fails to change element's <code>style.overflow</code> if its value was set from within HTML.
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_OVERFLOW_STYLE_BUGGY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
<tr>
<td>IS_CONTAINS_BUGGY</td>
<td></td>
<td>Safari 2.0 - 2.0.4 (possibly earlier too)</td>
<td>
In older Safari `contains` returns `true` for any unrelated node, as long as that node is not an ancestor of tested node.
</td>
<td><a href="#" title="show test code" class="show-test-code" name="IS_CONTAINS_BUGGY">show</a></td>
</tr>
<tr style="display:none"><td colspan="5" class="test-code"><pre></pre></td></tr>
</tbody>
</table>
<script src="feature_tests.js" type="text/javascript"></script>
<script src="master.js" type="text/javascript"></script>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try { var pageTracker = _gat._getTracker("UA-735042-3"); pageTracker._trackPageview(); } catch(err) {}
</script>
</body>
</html>