<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Just a Coder &#187; Browsers</title>
	<atom:link href="http://www.nickfitz.co.uk/categories/web-development/browsers/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nickfitz.co.uk</link>
	<description>The occasional online observations of Nick Fitzsimons</description>
	<lastBuildDate>Sun, 08 Jan 2012 02:09:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Urgent Update of Internet Explorer &#8211; Install It Now</title>
		<link>http://www.nickfitz.co.uk/2008/12/18/urgent-update-of-internet-explorer-install-it-now/</link>
		<comments>http://www.nickfitz.co.uk/2008/12/18/urgent-update-of-internet-explorer-install-it-now/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 04:03:49 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2008/12/18/urgent-update-of-internet-explorer-install-it-now/</guid>
		<description><![CDATA[Given that I&#8217;m so prone to criticising Microsoft, I have to give them credit for moving so rapidly to provide a patch for the recently discovered vulnerability in Internet Explorer. One little niggle: The email subject line &#8220;Out-of-Band Microsoft Security Bulletin Summary for December 2008&#8243; isn&#8217;t exactly clear. It uses terminology (&#8220;Out-of-Band&#8221;) relating to MS&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Given that I&#8217;m so prone to criticising Microsoft, I have to give them credit for moving so rapidly to provide a patch for the recently discovered vulnerability in Internet Explorer.<br />
<span id="more-34"></span><br />
One little niggle: The email subject line &#8220;Out-of-Band Microsoft Security Bulletin Summary for December 2008&#8243; isn&#8217;t exactly clear. It uses terminology (&#8220;Out-of-Band&#8221;) relating to MS&#8217;s update release strategy that probably makes no sense whatsoever to most people, who won&#8217;t even be aware of the monthly patch strategy. &#8220;Out-of-Band&#8221; is such a recondite term, being a technical usage that Microsoft are metaphorically relating to what is primarily a social issue of encouraging people to install an update, that it serves to obscure the importance of said update. What&#8217;s wrong with the word &#8220;Urgent&#8221;?</p>
<p>Still, leaving my obligatory whining aside, the number of versions and configurations patched makes it very clear that all users of Internet Explorer <em>must</em> install this one &#8211; and if your system isn&#8217;t supported, you <strong>really should upgrade</strong>.</p>
<p>What impresses me about this update is that it includes support for systems and versions so old that no web developer supports them anymore. This demonstrates that although we web devs may be able to pick and choose what we worry about through graded browser support (as do, for example, <a href="http://developer.yahoo.com/yui/articles/gbs/">Yahoo!</a> and <a href="http://www.bbc.co.uk/guidelines/futuremedia/technical/browser_support.shtml">the BBC</a>), there are nonetheless software developers out there, grappling with old C or C++ code, who are doing the desperately difficult job of supporting users of older systems. <a href="http://www.microsoft.com/technet/security/bulletin/ms08-dec.mspx">The list of systems and versions</a> they had to be sure to fix, and test, is available at Microsoft&#8217;s site: seventeen different combinations of operating system and browser version. <em>Seventeen!</em></p>
<p>Think about fixing and testing that little lot next time you&#8217;re upset by the <a href="http://positioniseverything.net/explorer/threepxtest.html">3-pixel text jog</a> <img src='http://www.nickfitz.co.uk/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2008/12/18/urgent-update-of-internet-explorer-install-it-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why &#8220;left: -9999px;&#8221; is Better For Accessibility Than &#8220;display: none;&#8221;</title>
		<link>http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/</link>
		<comments>http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/#comments</comments>
		<pubDate>Wed, 14 Feb 2007 18:17:20 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/</guid>
		<description><![CDATA[Update: Thierry Koblentz points out in the comments that either technique may be appropriate, depending on circumstances. I mention this in the last paragraph, but just to be clear, there should have been a &#8220;usually&#8221; or &#8220;often&#8221; or some such word in front of the &#8220;better&#8221; of the title. That, or a different title. Update [...]]]></description>
			<content:encoded><![CDATA[<p class="update"><strong>Update:</strong> <a href="http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/#comment-21146">Thierry Koblentz points out</a> in the comments that either technique may be appropriate, depending on circumstances. I mention this in the last paragraph, but just to be clear, there should have been a &#8220;usually&#8221; or &#8220;often&#8221; or some such word in front  of the &#8220;better&#8221; of the title. That, or a different title.</p>
<p class="update"><strong>Update 2, December 2008:</strong> It is now accepted that it is better to use <code>top: -9999px;</code>, as using <code>left:</code> would cause a scroll bar on <a href="http://news.bbc.co.uk/hi/arabic/news/">a page with right-to-left text</a>.</p>
<p>A recurring question on various mailing lists such as the <a href="http://webstandardsgroup.org/">Web Standards Group</a> discussion list is &#8220;How can I hide content but still have it accessible?&#8221; This is usually asked in the context of <a href="http://www.access-matters.com/2005/05/08/quiz-114-image-replacement-techniques/">image replacement techniques</a>, where one might for example wish to display a heading in a fancy typeface, but still have the content accessible to users of assistive technologies such as screen reading software.<br />
<span id="more-24"></span><br />
Two techniques, both reliant on CSS, tend to come up in these discussions: hiding the text by the use of <code>display: none</code> or <code>visibility: hidden</code>, and positioning the text off-screen, using absolute positioning and <code>left: -9999px</code>, or <code>margin-left: -9999px</code>.</p>
<p><a href="http://access-matters.com/">Access Matters</a> determined back in June 2005 that the <code>display</code> and <code>visibility</code> techniques appeared to be inaccessible to screen readers, whereas the offscreen positioning method was accessible. The <a href="http://access-matters.com/screen-reader-test-results/">full results</a> go into more detail.</p>
<p>One thing that nobody seemed to have bothered to explain was just <em>why</em> this was the case. Inspired by yet another thread on the subject, I finally decided to do some digging; if I don&#8217;t know <em>why</em> I&#8217;m doing something, I can&#8217;t be sure that I <em>should</em> be doing it, which leads to the risk of <a href="http://catb.org/jargon/html/C/cargo-cult-programming.html">Cargo Cult coding</a>.</p>
<h3>Ask the people who know</h3>
<p>To my astonishment, a search of the <a href="http://msdn.microsoft.com/library">Microsoft Developer Network Library</a> quickly brought me to the explanation I sought. (I was astonished because the MSDN library search is notorious for returning swathes of irrelevant results for even the simplest search; I have heard anecdotal evidence that Microsoft&#8217;s own developers search the library using Google with the <code>site:msdn.microsoft.com</code> specifier.)</p>
<p>The library&#8217;s section on <a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/accessibility/accessibility_node_entry.asp">accessibility support in Internet Explorer</a> is extensive, but the information about <a href="https://msdn.microsoft.com/workshop/browser/accessibility/overview/invisible.asp">invisible objects</a> told me all I needed to know. To quote:</p>
<blockquote cite="https://msdn.microsoft.com/workshop/browser/accessibility/overview/invisible.asp"><p>With Internet Explorer 6 and later, the <code>pvarState</code> parameter of the <code>IAccessible::get_accState</code> property receives <code>STATE_SYSTEM_OFFSCREEN</code> when the object is invisible because of scrolling and receives <code>STATE_SYSTEM_INVISIBLE</code> when the object is invisible because its <code>IHTMLStyle::visibility</code> property is set to <code>hidden</code>, or its <code>IHTMLStyle::display</code> property is set to <code>none</code>.</p></blockquote>
<h3>Again, in English?</h3>
<p>A screen reader doesn&#8217;t load an HTML page: the browser (usually Internet Explorer) does that. What the screen reader does is to ask IE about the content, using an API called <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msaa/msaastart_9w2t.asp">Microsoft Active Accessibility</a> (MSAA). MSAA allows the screen reader to interrogate the browser as to the contents of a page; the dialog, insofar as I understand it, would go something like:</p>
<dl>
<dt>Internet Explorer:</dt>
<dd>Hey, I&#8217;ve just loaded a page.</dd>
<dt>Screen reader:</dt>
<dd>Cool, what&#8217;s it got on it?</dd>
<dt>Internet Explorer:</dt>
<dd>There&#8217;s a heading, then some links, then a few paragraphs.</dd>
<dt>Screen reader:</dt>
<dd>OK; give us the heading.</dd>
<dt>Internet Explorer:</dt>
<dd>It says &#8220;Welcome to HyperGlobalMegaCorp&#8221;.</dd>
<dt>Screen reader:</dt>
<dd>Right, hang on a moment. <em>(Speaks the given text to the user.)</em>  </dd>
</dl>
<p>&#8230; and so on; you get the general idea.</p>
<p>The key is that IE doesn&#8217;t just return content to be spoken in some way; it also returns information <em>about</em> that content. This includes information that goes by the snappy name of <code>pvarState</code>, and one of the aspects of this information is that it can tell the screen reader whether or not the content of the thing it&#8217;s asking about (for example, the heading in the above dialogue) is actually displayed on the screen &#8211; that is, whether it&#8217;s visible or invisible. (Note that these terms aren&#8217;t being used here in exactly the same way as they are in CSS.)</p>
<p>There are three ways that IE comes to regard something as being invisible:</p>
<ol>
<li>It has the CSS property <code>display</code> set to the value <code>none</code>;</li>
<li>It has the CSS property <code>visibility</code> set to the value <code>hidden</code>;</li>
<li>It is in a position where the window would need to be scrolled for it to become visible.</li>
</ol>
<p>IE further distinguishes these three forms of invisibility by dividing them into two kinds. The first two forms of invisibility are denoted by the <code>pvarState</code> value <code>STATE_SYSTEM_INVISIBLE</code>, and the final form is denoted by the value <code>STATE_SYSTEM_OFFSCREEN</code>.</p>
<p>So finally it all becomes clear: screen readers will treat content with the state <code>STATE_SYSTEM_OFFSCREEN</code> as being content that it should read, because it&#8217;s only invisible by virtue of not being within the visible region of the window: after all, a screen reader that required the user to scroll the window to read all of the content would be of very little value to anybody. The only reason that the content can&#8217;t actually be scrolled into view when using the off-left or off-top positioning technique is that Internet Explorer itself doesn&#8217;t support the concept of scrolling the window by a negative amount, although I believe this isn&#8217;t a limitation of the Windows scrolling mechanism <span lang="la">per se</span>.</p>
<p>If, however, the screen reader finds that the state of the content is <code>STATE_SYSTEM_INVISIBLE</code> it apparently concludes that it must have been concealed for a reason, and doesn&#8217;t speak it.</p>
<p>So there you go: use one of the offscreen methods and the screen reader will treat your content as being there; use the <code>display</code> or <code>visibility</code> method and the screen reader will discard it, meaning that this is a reliable way of concealing content from both a normal user and a screen reader user, should you have a reason to do so. But armed with the information above, you&#8217;ll at least know <em>why</em> you&#8217;re using whichever method you apply.</p>
<p class="update">
This post is now available in <a href="http://www.fatcow.com/edu/why-left-9999px-be/">Belorussian</a> provided by <a href="http://www.fatcow.com/">http://www.fatcow.com/</a> &#8211; many thanks for that!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2007/02/14/why-left-9999px-is-better-for-accessibility-than-display-none/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>IE7 Beta Preview available</title>
		<link>http://www.nickfitz.co.uk/2006/01/31/ie7-beta-preview-available/</link>
		<comments>http://www.nickfitz.co.uk/2006/01/31/ie7-beta-preview-available/#comments</comments>
		<pubDate>Tue, 31 Jan 2006 19:09:08 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/?p=10</guid>
		<description><![CDATA[MS finally lets us look at the new version. Buy Virtual PC first...]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://blogs.msdn.com/ie">IEBlog</a> has announced the release of the <a href="http://blogs.msdn.com/ie/archive/2006/01/31/520812.aspx">Beta Preview of IE7</a>. Unfortunately, you need to overwrite your existing system to use it, or shell out hard cash for <a href="http://www.microsoft.com/windows/virtualpc/default.mspx">Virtual PC</a>, sold by&#8230; Microsoft.</p>
<p>Oh, and it only works on <a href="http://www.microsoft.com/athome/security/update/sp2.mspx">XPSP2</a>; bet you wish you hadn&#8217;t shelled out for <a href="http://www.microsoft.com/windowsserver2003/default.mspx">Windows Server 2003</a> now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2006/01/31/ie7-beta-preview-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE Conditional Comments in XSLT 1.0</title>
		<link>http://www.nickfitz.co.uk/2005/10/27/ie-conditional-comments-in-xslt-10/</link>
		<comments>http://www.nickfitz.co.uk/2005/10/27/ie-conditional-comments-in-xslt-10/#comments</comments>
		<pubDate>Thu, 27 Oct 2005 18:47:04 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[XSLT 1.0]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/?p=7</guid>
		<description><![CDATA[Think you can't use Internet Explorer for Windows' conditional comments in XSLT 1.0? Think again...]]></description>
			<content:encoded><![CDATA[<p>Zen gardener Dave Shea&#8217;s post <a href="http://www.mezzoblue.com/archives/2005/10/13/bye_bye_tan_/">Bye Bye Tan Hack</a> attracted a number of comments from people claiming that <a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/ccomment_ovw.asp">Internet Explorer&#8217;s conditional comments</a> (CCs) were ungeneratable if you are using XSLT to produce your pages. &#8220;Strange,&#8221; I thought, &#8220;I&#8217;ve done that before.&#8221;<br />
<span id="more-7"></span><br />
I&#8217;ve been working with XSLT for several years, and the project I&#8217;m currently working on uses it intensively; getting CCs working was simmering somewhere down my todo list. (I couldn&#8217;t recycle any previous efforts for boring, legal IP reasons.) So I set to work, and am happy to present an XSLT template which will build your conditional comments for you. I&#8217;ve tested it with Xalan 2.2, Saxon 6.5.3, MSXML 3 and MSXML 4 (those being the only XSLT processors I had to hand), and it worked perfectly with all of them.</p>
<p>In addition, I&#8217;ve created a <a href="/xslt/cc/ConditionalCommentDemo.xml">demonstration</a> for Firefox, Internet Explorer and Safari (2.0.1 on Tiger, anyway). This XML file uses an XSL stylesheet which generates a conditional comment. Using Firefox&#8217;s DOM Inspector you can see that the comment is created correctly. Using Internet Explorer, a stylesheet is linked which modifies the appearance of the page&#8217;s heading. This demonstrates that the technique I&#8217;m describing can be used client-side as well as in server-side transformations.</p>
<p>First, the template:</p>
<pre><code>
&lt;xsl:template name="conditionalComment">
    &lt;xsl:param name="qualifier" select="'IE'"/>
    &lt;xsl:param name="contentRTF" select="''" />
    &lt;xsl:comment>[if &lt;xsl:value-of select="$qualifier"/>]&lt;![CDATA[>]]&gt;
        &lt;xsl:copy-of select="$contentRTF" />
        &lt;![CDATA[&lt;![endif]]]&gt;&lt;/xsl:comment>
&lt;/xsl:template>
</code></pre>
<p>Easy, yes? Well, maybe not; let&#8217;s look at it one step at a time.</p>
<p>The template takes two parameters:</p>
<dl>
<dt><code>qualifier</code></dt>
<dd>The qualifier for the &#8220;if&#8221; clause of the comment. Defaults to &#8220;IE&#8221;, which targets any version of Internet Explorer that recognises conditional comments.</dd>
<dt><code>contentRTF</code></dt>
<dd>The body of the comment: the stuff that IE gets to see (depending on the qualifier). This is passed as a result tree fragment; if you&#8217;re not sure what that means, you may want to go and read the <a href="http://www.w3.org/TR/xslt#section-Result-Tree-Fragments">relevant section of the XSLT spec</a>. Defaults to an empty string.</dd>
</dl>
<p>We can invoke the template using the following code:</p>
<pre><code>
&lt;xsl:call-template name="conditionalComment">
    &lt;xsl:with-param name="qualifier" select="'lte IE 6'"/>
    &lt;xsl:with-param name="contentRTF">
        &amp;lt;link rel="stylesheet" type="text/css" href="ie-win-fixup.css" /&amp;gt;
    &lt;/xsl:with-param>
&lt;/xsl:call-template>
</code></pre>
<p>That will give us a conditional comment targeting Internet Explorer versions 6 and below (&#8220;lte IE 6&#8243;). NOTE: I haven&#8217;t messed up my character entities there; the HTML we want to output really is expressed as you see above in the XSLT code.</p>
<p>So how does it work?</p>
<p>The comment is generated using the <xsl :comment> element. Note that we want to keep tight control of our whitespace here, making the rest of the template pretty unreadable. Split into its component parts, we have:</p>
<dl>
<dt><code>&lt;xsl:comment></code></dt>
<dd>Starts outputting our comment to the result tree. Output so far: <code>&lt;!--</code></dd>
<dt><code>[if &lt;xsl:value-of select="$qualifier"/>]</code></dt>
<dd>Starts adding on the bits needed to make IE parse this as a conditional comment, using the value of the qualifier parameter. In the example case, our output is now up to <code>&lt;!--[if lte IE 6]</code></dd>
<dt><code>&lt;![CDATA[>]]&gt;</code></dt>
<dd>This CDATA section is treated as raw characters to copy to the result tree by the XSLT processor. So our output becomes:<br />
<code>&lt;!--[if lte IE 6]></code> which is the start of our conditional comment.</dd>
<dt><code>&lt;xsl:copy-of select="$contentRTF"/></code></dt>
<dd>This just copies the contents of our result tree fragment to the result tree. Our output is now:</p>
<pre><code>
&lt;!--[if lte IE 6]>
&lt;link rel="stylesheet" type="text/css" xhref="ie-win-fixup.css" mce_href="ie-win-fixup.css" />
</code></pre>
<p>Notice that the character entity references we passed in in contentRTF (<code>&amp;lt;</code> and <code>&amp;gt;</code>) have now been turned into the actual characters we wanted, through the magic of result tree fragments. (In fact, this technique can be abused to allow invalid XML output from an XSLT processor, which is why it isn&#8217;t likely to survive into XSLT 2.0.)</dd>
<dt><code>&lt;![CDATA[>![endif]]]&gt;</xsl:comment></code></dt>
<dd>Our final line uses another CDATA section to provide the markup IE needs to recognise the end of the comment, and then the <code></xsl:comment></code> closes our comment. Note again that there is no whitespace between the CDATA section and the closing-comment element: this is where IE&#8217;s CC parser might trip up, so we make do with a little unreadability for the sake of getting the result we want which, in all its refulgent splendour, now looks like:</p>
<pre><code>
&lt;!--[if lte IE 6]>
&lt;link rel="stylesheet" type="text/css" href="ie-win-fixup.css" />
&lt;![endif]-->
</code></pre>
</dd>
</dl>
<p>So there you have it: an XSLT template for creating Internet Explorer conditional comments. Hopefully re-targeting your CSS hacks in readiness for the new age just got a little easier.</p>
<p class="update">
This post is now <a href="http://webhostinggeeks.com/science/comments-xslt-rm">available in a Romanian translation</a> (by <a href="http://webhostinggeeks.com/">Web Geek Science</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2005/10/27/ie-conditional-comments-in-xslt-10/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Obscure Internet Explorer Bugs: #1 of&#8230; who knows?</title>
		<link>http://www.nickfitz.co.uk/2005/05/17/obscure-internet-explorer-bugs-1-of-who-knows/</link>
		<comments>http://www.nickfitz.co.uk/2005/05/17/obscure-internet-explorer-bugs-1-of-who-knows/#comments</comments>
		<pubDate>Tue, 17 May 2005 19:51:22 +0000</pubDate>
		<dc:creator>nickfitz</dc:creator>
				<category><![CDATA[Bugs]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://www.nickfitz.co.uk/?p=2</guid>
		<description><![CDATA[<p>
A very peculiar bug in Internet Explorer: ever seen a tagName begin with a <code>/</code> before?
</p>]]></description>
			<content:encoded><![CDATA[<p>The Web Standards Group presented <a href="http://webstandardsgroup.org/features/tommy-olsson.cfm">ten questions</a> to <a href="http://autisticcuckoo.net/">Tommy Olsson</a>, one of which addresses the thorny issue of the <code>abbr</code> and <code>acronym</code> elements in HTML.<br />
<span id="more-2"></span><br />
Tommy&#8217;s discussion of this was informative, and I was particularly entertained by his assertion that</p>
<blockquote><p>Netscape invented ABBR, while Microsoft invented ACRONYM, and both types meant the same thing. Then the W3C incorporated both in HTML 3, but with subtly different semantics. Microsoft&#8217;s meaning of ACRONYM was replaced by something different, which made the people at Microsoft so furious that to this day they still don&#8217;t support the ABBR element type!</p></blockquote>
<p>as I came across a manifestation of this (possibly imaginary) dislike for the <code>abbr</code> element in Internet Explorer quite recently.</p>
<p>Consider the following markup fragment:</p>
<p><code></p>
<p>An example of an abbreviation might be <abbr title="Limited Liability Company">Ltd.</abbr>, used in the UK to denote a private company with limited liability.</p>
<p></code></p>
<p>One would expect a browser which supports <a href="http://www.w3.org/TR/html401/">HTML 4</a> (which IE is claimed to have done since <a href="http://msdn.microsoft.com/workshop/essentials/versions/xplatform.asp">version 4</a>) to produce a DOM structure as follows:</p>
<ul>
<li>Element: <strong>p</strong>
<ul>
<li>Text: <em>An example of an abbreviation might be </em></li>
<li>Element: <strong>abbr</strong>
<ul>
<li>Text: <em>Ltd.</em></li>
</ul>
</li>
<li>Text: <em>, used in the UK to denote a private company with limited liability.</em></li>
</ul>
</li>
</ul>
<p>Whereas IE actually produces the following:</p>
<ul>
<li>Element: <strong>p</strong>
<ul>
<li>Text: <em>An example of an abbreviation might be </em></li>
<li>Element: <strong>abbr</strong></li>
<li>Text: <em>Ltd.</em></li>
<li>Element: <strong style="color: red">/abbr</strong></li>
<li>Text: <em>, used in the UK to denote a private company with limited liability.</em></li>
</ul>
</li>
</ul>
<p>Yes, that&#8217;s correct: the initial <code>abbr</code> is parsed into an element, the text within remains as a <code>childNode</code> of the paragraph, and an element with the name <code>/abbr</code> is created.</p>
<p>If you try to use the <code>createElement</code> method of the <code>document</code> to create such an element, you naturally get an exception. But internally, IE manages to create an element whose name begins with a slash.</p>
<p>I don&#8217;t have a PC at home, so I can&#8217;t check right now whether or not spurious markup like <code><goat>Hello</goat></code> produces the same result, but I&#8217;ll check at work tomorrow and report back.</p>
<p><em>Long-delayed update</em>: The <goat> example above does indeed produce the same results.</goat></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickfitz.co.uk/2005/05/17/obscure-internet-explorer-bugs-1-of-who-knows/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

