<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>QuirksBlog</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/" />
<modified>2009-06-29T12:01:00Z</modified>
<tagline></tagline>
<id>tag:www.quirksmode.org,2009:/blog//1</id>
<generator url="http://www.movabletype.org/" version="3.14">Movable Type</generator>
<copyright>Copyright (c) 2009, ppk</copyright>

<entry>
<title>Fronteers 2009 - Douglas Crockford and Molly Holzschlag</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/06/fronteers_2009_2.html" />
<modified>2009-06-29T12:01:00Z</modified>
<issued>2009-06-29T11:39:14Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1758</id>
<created>2009-06-29T11:39:14Z</created>
<summary type="text/plain"><p>As I announced earlier the Fronteers 2009 conference will be held in Amsterdam on the 5th and 6th of November. Today we announce two speakers, and we also have extended the early bird period by one week (ends 10th of July instead of 3rd). The conference will be held entirely in English.
</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Conferences</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>As I <a href="/blog/archives/2009/06/fronteers_2009_1.html">announced earlier</a> the <a href="http://fronteers.nl/congres/2009/information" class="external">Fronteers 2009</a> conference will be held in Amsterdam on the 5th and 6th of November. Today we announce two speakers, and we also have extended the early bird period by one week (ends 10th of July instead of 3rd). The conference will be held entirely in English.</p>
]]>
<![CDATA[<p>We&#8217;re proud to announce that <a href="http://crockford.com" class="external">Douglas Crockford</a>, inventor of JSON and one of the most important JavaScript theoreticians, and <a href="http://molly.com" class="external">Molly Holzschlag</a>, reigning queen of web development, prolific writer and speaker, currently working for Opera, will come to Amsterdam to share their thoughts on various facets of web development.</p>

<p>When adding these two top speakers to the already-existing roster of <a href="http://stevesouders.com" class="external">Steve Souders</a>, <a href="http://nate.koechley.com" class="external">Nate Koechley</a>, <a href="http://ejohn.org" class="external">John Resig</a>, and <a href="http://stubbornella.org" class="external">Nicole Sullivan</a>, we&#8217;re starting to see the outline of a first-class web development conference. The other six speakers will be announced later.</p>

<p>Currently <a href="http://fronteers.nl/congres/2009/tickets" class="external">Fronteers 2009 tickets</a> are &euro; 250 (&euro; 175 for one day), but when the early bird period expires on the 10th of July these prices will go up to &euro; 350 and &euro; 250, respectively. So now is the time to order your ticket. (Fronteers members have additional discounts; you ought to have received a mail with instructions by now.)</p>

<p>I hope to be able to welcome some of my readers in Amsterdam in November.</p>]]>
</content>
</entry>
<entry>
<title>State of the Browsers &amp;#8212; IE edition</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/06/state_of_the_br_1.html" />
<modified>2009-06-18T14:46:07Z</modified>
<issued>2009-06-16T21:48:32Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1756</id>
<created>2009-06-16T21:48:32Z</created>
<summary type="text/plain"><p>Recently I held a presentation at a local Microsoft conference in the Netherlands.
Slides are here. Fanatical followers
will recognise most of the topics I discussed from earlier slide shows, but the last one,
about the changes to the market share of IE6, 7, and 8, is new.

Basically, IE6 will continue to exist
when IE7 has all but disappeared, and, contrary to what you might expect, this situation
will create exciting opportunities for Microsoft&amp;#8217;s competitors.

Besides, last week the news came that Microsoft
is going to voluntarily de-bundle IE from all Windows 7 machines that will be sold
in Europe, and I continue to have my doubts about that affair.

So it&amp;#8217;s time for a special State of the Browsers IE edition.

</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Browser Wars</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>Recently I held a presentation at a local Microsoft conference in the Netherlands.
Slides are <a href="/presentations/msdevdays/msdevdays.pdf">here</a>. Fanatical followers
will recognise most of the topics I discussed from earlier slide shows, but the last one,
about the changes to the market share of IE6, 7, and 8, is new.</p>

<p>Basically, IE6 will continue to exist
when IE7 has all but disappeared, and, contrary to what you might expect, this situation
will create exciting opportunities for Microsoft&#8217;s competitors.</p>

<p>Besides, last week the news came that Microsoft
is going to voluntarily de-bundle IE from all Windows 7 machines that will be sold
in Europe, and I continue to have my doubts about that affair.</p>

<p>So it&#8217;s time for a special State of the Browsers IE edition.</p>

]]>
<![CDATA[<h3>Market share</h3>

<p>As we all know IE8 is out, and whatever your opinion, no one will doubt that it&#8217;s
a better browser than IE7, and that a quick growth of the IE8 market share will
serve web developers well.</p>

<p>Still, the real problem for web developers is IE6. That&#8217;s the browser we
absolutely have to get rid of.</p>

<p>IE8 is picking up quite a bit of market share right now; but as far as I can see that
share mostly comes from IE7, and not from IE6. The
following graph shows where I think the market shares of the various IEs are heading:</p>

<img src="/pix/iemarket.gif" alt="IE8's market share is on the rise, but it's IE7's that falls, and not IE6's.">

<p>Although IE8 will become the largest Microsoft browser, I expect IE6 to retain about
20 to 25% of the market even by the end of 2010 (OK, maybe 15%, but still considerable),
while IE7 will drop below IE6 sometime (early?) next year.</p>

<p>Now why do I expect IE6 to stick around while IE7 goes down? The answer is
simple: Intranets.</p>

<h4>Intranets</h4>

<p>In the era of IE6 dominance (2000-2006), countless companies created countless
Intranet application for time registration, sales support, contact information,
you name it. All these applications are absolutely vital for the daily datastream
in these companies.</p>

<p>Some companies deliberately opted for Microsoft technology and a Microsoft-only Intranet,
while others were lazy and didn&#8217;t bother to make these apps compatible with
other browsers, even though they did not particularly use Microsoft products.</p>

<p>The net result is that there are countless vital apps around the world that only
work with IE6. Not with another browser &#8212 not even IE7. Therefore the companies
did not upgrade their browser. (Incidentally, this was the
most important reason for Microsoft to introduce the versioning switch &#8212; the IE
team wanted to prevent a repeat performance of this problem.)</p>

<p>Sure, some companies
will revise these apps to work with other browsers, but many won&#8217;t,
partly because it costs too much money in this time of recession, partly because
it&#8217;s so hard to find good front-end engineers (which good front-ender
wants to work on Intranet applications for several years?), and partly because
the old apps still work, don&#8217;t they?</p>

<p>So many old apps won&#8217;t change, and many office workers will continue
to be condemned to IE6.</p>

<h4>Office vs. home</h4>

<p>At work, that is. It&#8217;s quite likely that on their private computer at home
they run another browser &#8212; IE7 or 8, Firefox, or maybe one of the smaller ones.</p>

<p>What generally gets too little attention is the difference between browser stats
during office hours and browser stats outside office hours. More than one web developer
told me in the past year that there is quite a bit of difference between the two.</p>

<p>Basically, most of the IE6 market share comes from office-hour surfing, while it
drops significantly in the after-hours period. This is something to keep an eye
on when a client comes with his site stats. If you can, split out the office hours
and after-hours stats, and take a look at the pattern that emerges.</p>

<p>I wouldn&#8217;t be surprised if business-to-business clients will continue
to demand IE6 compatibility, while business-to-consumer clients will start to
drop this demand &#8212; especially when we put a realistic price tag on IE6.
It all depends on <em>when</em> users visit their site.</p>

<p class="smaller">Update: reader S. Anand <a href="http://www.s-anand.net/blog/ie6-in-corporates/" class="external">found exactly the predicted result</a> when he checked his logfiles</p>

<h4>The price tag</h4>

<p>I think that we web developers will start to get fed up with IE6 to
such a degree that we are actually going to charge more money when this browser
comes into play.</p>

<p>&#8220;Want a site that works perfectly in IE6? Fine, but it&#8217;ll cost you about
20 to 30% extra.&#8221;</p>

<p>In fact, I hope web developers will start to charge this extra amount reasonably soon.
Some clients won&#8217;t be willing to pay, which will save you a lot of heartache
(and hair care products), some clients will actually pay you for your extra-special IE6
trouble, and yes, you might lose some business as a result. Therefore this is a
decision everybody should take on their own.</p>

<p>Despite understandable hesitation, in the long run charging extra money for IE6
compatibility is inevitable. The result will be that less and less sites will work
perfectly in IE6.</p>

<h4>Two corporate browsers</h4>

<p>The victims will be the office workers during office hours. They&#8217;ll find that
they are less and less able to view perfect sites on the Internet &#8212;
even though their Intranet applications will still work fine.</p>

<p>The obvious solution to this problem will be to install another browser for real
surfing on the corporate network. Whichever browser the company will eventually
select, one thing is certain: it will <em>not</em> be IE.</p>

<p>After all, it&#8217;s officially impossible to install several IE versions next to
each other, and I doubt whether cautious and conservative corporate sysadmins will go
with one of the unofficial ways.</p>

<p>In fact, a source within a large company told me they are seriously considering
installing Opera as the real browser on their internal network, and use IE6 only
for accessing their internal apps. I have no idea whether that will actually happen
in this particular company, but it shows that the basic scenario is viable.</p>

<p>Thus IE6 will more and more become an internal system browser, while office workers
use a non-IE browser to surf the real Internet. This process will work to the detriment
of IE&#8217;s overall market share relative to the other browsers.</p>

<p>Companies will be forced to choose one non-IE browser. Which one? Probably the
one with the best marketing machine.</p>

<p>This opens up perspectives for the other browser vendors &#8212; unless they&#8217;re locked
up in battles that are purported to serve and protect web developers and end users, but
will certainly harm the latter, while the former will not benefit much.</p>

<h3>Opera vs. Microsoft, round 3</h3>

<p>Microsoft has <a href="http://news.cnet.com/8301-13860_3-10262630-56.html"
	class="external">voluntarily decided to unbundle IE</a> from all Windows 7 computers
that will be sold in Europe. It leaves the choice and installation of
the browser to the hardware vendors or the consumers.</p>

<p>This is supposed to be a great victory for web standards. Hurray, hurray.</p>

<p>Frankly, I&#8217;m getting downright frightened of the whole affair. I wish the
European Commission, Opera, and their allies would just stop it. It&#8217;s opening
the path for an endless series of partisan complaints.</p>

<p>Sure, it was to Microsoft&#8217;s advantage that IE was automatically
installed on any Windows computer. Sure, it has inflated IE&#8217;s market share
to 90%, because the other browser vendors didn&#8217;t have comparable distribution
channels.</p>

<p>Still, I wonder if anybody would have complained if IE had been 100% standards
compliant. It&#8217;s the <em>combination</em> of distribution advantage with the
eternal IE6 problems that made people get sick of Microsoft.</p>

<p>Besides, I have my doubts about the fairness of the process.
I have not yet heard a similar complaint against Apple for tying Safari to
its operating system. Or against the KDE guys for tying Konqueror to theirs, for that matter.</p>

<h4>Canned worms, anyone?</h4>

<p>In any case, Microsoft is not awaiting the European Commission&#8217;s formal ruling
and has chosen the <a href="/blog/archives/2009/01/last_friday_a_p.html">Zero option</a>.
A new Windows computer will contain zero browsers &#8212; unless the hardware vendor
installs a browser of its choice.</p>

<p>There are several things wrong with this solution:</p>

<ol>
	<li>Suppose a consumer buys a new computer and it doesn&#8217;t have any browser
	installed on it. How is he going to get one?</li>
	<li>Probable answer: some kind of temporary download
	program that pops up the very first time he uses his computer and gives him the
	choice of no less than <em>five</em> browsers. Problem is, the consumer
	doesn&#8217;t want this choice because he has no idea what&#8217;s going on.</li>
	<li>Besides, if this solution is implemented we can expect a stream of complaints
	from the truly tiny browsers nobody has ever heard of. In all fairness, we should
	include them, too. So the user will get the choice of eight to ten (twelve?
	fourteen?) browsers &#8212; a choice he doesn&#8217;t want and has no idea
	what to do with.</li>
	<li>Or will somebody have to decide which browsers to allow in this program? Who?
	How long will it take before this person or institution is accused of unfairness
	because he forgot one browser?</li>
	<li>Now suppose the hardware vendor installs one browser on the computer.
	Even worse, suppose this browser is actually IE. Are we going to get a crusade
	against hardware vendors, too, for daring to install the wrong browser?</li>
	<li>Suppose the world caves in to the mighty pressure of teh Interwebz and forsakes
	IE forever. Now hardware vendors will install another browser. Let&#8217;s say
	they mostly opt for Firefox &#8212; a reasonable choice in today&#8217;s market.
	Will we get a re-run of the entire thing, but now aimed against those evil hardware
	vendors who&#8217;re giving Firefox an unfair advantage? If so, when will it stop? If not,
	where&#8217;s the fairness in the process?</li>
</ol>

<p>We&#8217;re opening up a can of worms that should remain firmly closed.</p>

<h4>Precedent</h4>

<p>Finally, with this ruling we&#8217;re setting a precedent that I feel should not be set.</p>

<p>Opera Mobile used as default browser for all HTC phones? Unfair advantage!
Google WebKit default for Android? Unfair advantage! And let&#8217;s not talk about the
iPhone and Apple&#8217;s manifestly hideous unfair advantage there.</p>

<p>If we take this ruling to it utmost conclusion a mobile phone vendor may not
install a default browser on its system, but will have to allow consumers free choice, too.
So the innocent end user who just wants to surf with his brand new mobile phone will first have
to pick one of approximately two dozen browsers.</p>

<p>Where will it stop?</p>

<p>I feel we should allow Microsoft to continue to bundle IE with Windows.
Not because it&#8217;s good and proper what Microsoft has been doing, but because the
alternatives are far worse.</p>

<p>As I showed in the first part of this article, Microsoft&#8217;s competitors
are granted a unique chance to conquer the office market. I feel they
should spend their energy on that part of the market instead of setting potentially
dangerous precedents that will most likely harm the end-users more than anyone else.</p>
]]>
</content>
</entry>
<entry>
<title>HTML5 Storage tests</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/06/html5_storage_t.html" />
<modified>2009-06-12T17:41:47Z</modified>
<issued>2009-06-12T17:40:51Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1753</id>
<created>2009-06-12T17:40:51Z</created>
<summary type="text/plain"><p>I have started an HTML5 compatibility table today.
For now it only contains a test of HTML5 Storage in all desktop browsers,
and a short report is in order. I also retested the DOM HTML; no changes.

</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Content</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>I have started an <a href="/dom/html5.html">HTML5</a> compatibility table today.
For now it only contains a test of HTML5 Storage in all desktop browsers,
and a short report is in order. I also retested the <a href="/dom/w3c_html.html">DOM HTML</a>; no changes.</p>

]]>
<![CDATA[<p>HTML5 Storage allows you to set some fields in what can best be described as a
simple database in the browser. This allows you to retrieve such a value even when the
user has closed his browser and reopened it.</p>

<p>Although in theory there&#8217;s little difference with cookies, HTML5 Storage is more
useful because it doesn&#8217;t get sent to the server (less overhead), and because
the fields can contain more information than a cookie (this feature is untested, BTW).
These two advantages are clearest when you want to set a lot of values; for instance
for a preference menu.</p>

<p>HTML5 Storage is supported by IE8, Firefox 3.5b4, and Safari 4. As yet Chrome and Opera
do not support it.</p>

<p>Safari&#8217;s support is by far the best, because it is the only browser to also support
the special properties of the new storage event.</p>

<p>IE8 supports HTML5 Storage in both IE8 and IE7 mode. A pure IE7 does not support HTML5 Storage.</p>

<h3>localStorage and sessionStorage</h3>

<p>There are two storage options:</p>

<ol>
	<li><code>sessionStorage</code> sets fields on the window. When the window is closed,
	the session fields are lost, even if the site remains open in another window.</li>
	<li><code>localStorage</code> sets fields on the domain. Even when you close the
	browser, reopen it, and go back to the site, it remembers all fields in
	<code>localStorage</code>.</li>
</ol>

<p>Essentially, that means that the entire <code>sessionStorage</code> is cleared when the
user closes the browser window, while <code>localStorage</code> will remain available forever.</p>

<p>Except for this difference the two storage objects work exactly the same.
The <a href="/dom/html5.html#localstorage">detail table</a> contains a full breakdown
of the rather simple API.</p>

<h3>The storage event</h3>

<p>The <a href="http://www.w3.org/TR/webstorage/" class="external">specification</a>
also defines a storage event that fires whenever a change is made to
a field. Safari requires you to define your event listener on the <code>&lt;body&gt;</code>; IE
requires it to be set on the <code>document</code>. Firefox doesn&#8217;t care.</p>

<p>The interesting part is that if you change a <code>localStorage</code> field this event fires
in <em>all</em> windows that contain a page of your site.</p>

<p>So if I&#8217;d open three QuirksMode.org pages in three tabs, and I&#8217;d
change the <code>localStorage</code> in one of them, the event fires in all three tabs.
Thus other pages can keep track of what&#8217;s going on and update themselves, if necessary.</p>

<p>This event needs some special properties in order to tell us which key was changed, what
the old and the new value are, etc. Unfortunately only the Safari team has made an effort to
implement them; Firefox supports only the least interesting property, and IE none at all.</p>

<p>By far the most interesting property is <code>source</code>, which refers to the window
in which the <code>localStorage</code> change took place.</p>

<p>By itself that&#8217;s only of moderate interest, but the consequence is that we now have
a way of connecting windows that do not know of each other&#8217;s existence.</p

<p>Remember: Safari only. IE and Firefox have not implemented this property.</p>

<h3>Cross-window communication</h3>

<p>Until now, windows could only influence each other if they were aware
of each other&#8217;s existence; i.e. if one window was opened by the other by means of
JavaScript. In that case, the new window received an <code>opener</code> property that referred
to the old window, while in the old window you could store the return value of the <code>window.open()</code>
call (i.e. the new window) in a variable.</p>

<p>This was the only way of enabling cross-window communication. If a user manually
opened two pages of your site in two windows, there was no way these windows could figure out
each other&#8217;s existence.</p>

<p>With the coming of the <code>source</code> property this restriction is lifted.</p>

<p>When a storage event fires and you read out the <code>source</code>, you can now access the
window in which the event fired. In other words, you have created a reference from one window
to another.</p>

<p>In order to connect all windows that have your site in them, just register a storage event,
change a field in one window, capture the events in the other windows, and create a variable.
Now all other windows are connected to the first one, and a simple cross-window script will
create a lookup table that gives all windows access to all other ones.</p>

<p>Although this sounds nice, I wonder if there are security repercussions.</p>

<p>Still, HTML5 Storage is here to stay, and it will be especially important on mobile phones,
which, as always, suffer from worse data connections than desktop browsers. I&#8217;ll run
the tests on the mobile browsers later.</p>
]]>
</content>
</entry>
<entry>
<title>Fronteers 2009 conference</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/06/fronteers_2009_1.html" />
<modified>2009-06-08T09:51:27Z</modified>
<issued>2009-06-08T09:18:59Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1751</id>
<created>2009-06-08T09:18:59Z</created>
<summary type="text/plain"><p><![CDATA[Just as we did last year, Fronteers, the organisation of front-end engineers in the Netherlands, organises a front-end conference. Ticket sale has started, and two more speakers have been announced.

The Fronteers 2009 conference will be held on 5th and 6th of November in Amsterdam. In addition to Nate Koechley
 and Steve Souders
, John Resig of jQuery and Nicole Sullivan will join us to discuss JavaScript libraries and object-oriented CSS, respectively. The line-up will consist of twelve world-class speakers; the other eight will be announced later.

Ticket sale has started; currently we&#8217;re in the early bird period that will expire on the 3rd of July. A two-day ticket costs &euro; 250; a one-day ticket &euro; 175.

Additional discounts are available for Fronteers members (who have meanwhile received a mail), and Dutch educational institutions.

The conference is sponsored by Vodafone, and we&#8217;re currently negotiating with other potential sponsors.

I hope to see some of you at Fronteers 2009!
]]></p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Conferences</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>Just as we did last year, Fronteers, the organisation of front-end engineers in the Netherlands, organises a front-end conference. Ticket sale has started, and two more speakers have been announced.</p>

<p>The <a href="http://fronteers.nl/congres/2009/information" class="external">Fronteers 2009 conference</a> will be held on 5th and 6th of November in Amsterdam. In addition to <a href="http://nate.koechley.com" class="external">Nate Koechley</a>
 and <a href="http://stevesouders.com" class="external">Steve Souders</a>
, <a href="http://ejohn.org/" class="external">John Resig</a> of jQuery and <a href="http://stubbornella.org" class="external">Nicole Sullivan</a> will join us to discuss JavaScript libraries and object-oriented CSS, respectively. The line-up will consist of twelve world-class speakers; the other eight will be announced later.</p>

<p><a href="http://fronteers.nl/congres/2009/tickets" class="external">Ticket sale</a> has started; currently we&#8217;re in the early bird period that will expire on the 3rd of July. A two-day ticket costs &euro; 250; a one-day ticket &euro; 175.</p>

<p>Additional discounts are available for Fronteers members (who have meanwhile received a mail), and Dutch educational institutions.</p>

<p>The conference is sponsored by Vodafone, and we&#8217;re currently negotiating with other potential sponsors.</p>

<p>I hope to see some of you at Fronteers 2009!</p>
]]>

</content>
</entry>
<entry>
<title>DOM Core tests on desktop and mobile</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/05/dom_core_tests.html" />
<modified>2009-05-25T11:56:55Z</modified>
<issued>2009-05-25T11:55:30Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1748</id>
<created>2009-05-25T11:55:30Z</created>
<summary type="text/plain"><p>Last week I&amp;#8217;ve done the DOM Core tests in new
browsers: IE8 final (in both IE8 and IE7 mode), Firefox 3.5b4, Safari 4.0, Chrome 1 and 2, and Opera 10a.
I found no surprises.

After that I decided to continue with mobile browsers, of which I have 15 lying around on
my desk. Unfortunately I could not test IE Mobile
(old) because it supports only inline event handlers, Skyfire because it does not allow you
to remove alerts, and the Opera runtime in the Vodafone widget manager for terrifyingly complicated
reasons I still have to describe properly.

Still I managed to test the other twelve and found a few surprises.
</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>Last week I&#8217;ve done the <a href="/dom/w3c_core.html">DOM Core tests</a> in new
browsers: IE8 final (in both IE8 and IE7 mode), Firefox 3.5b4, Safari 4.0, Chrome 1 and 2, and Opera 10a.
I found no surprises.</p>

<p>After that I decided to continue with mobile browsers, of which I have 15 lying around on
my desk. Unfortunately I could not test IE Mobile
(old) because it supports only inline event handlers, Skyfire because it does not allow you
to remove alerts, and the Opera runtime in the Vodafone widget manager for terrifyingly complicated
reasons I still have to describe properly.</p>

<p>Still I managed to <a href="/m/w3c_core.html">test the other twelve</a> and found a few surprises.</p>
]]>
<![CDATA[<ul>
	<li>The most surprising finding was that there were so few surprises. Although many mobile
	browsers have a pretty bad press, their DOM Core compatibility, at least, is mostly correct.
	All tested browsers support the DOM Core well, and the only real
	differences were in the support of advanced methods such as <code>querySelectorAll()</code>,
	which have hit the mainstream only in the past year or so.</li>

	<li>I found a few golden oldie WebKit bugs in the S60 version: <code>attributes[key]</code>
	is not supported, and the <code>contains()</code> has a bug: the browser always returns
	<code>true</code>. On desktop these bugs were solved in Safari 2 or 3, if I recall correctly.
	This proves S60 WebKit is behind all other WebKits, but we already knew that.</li>

	<li>Empty text nodes are not supported by IE, as everybody knows. Personally I&#8217;ve always
	found that a blessing because empty text nodes are mostly useless. All other desktop browsers
	do support empty text nodes.<br>
	After my recent research I can add four mobile ones to the roster of non-supportive browsers:
	Opera 8, NetFront, Blackberry, and the S60 WebKit on the Samsung i560 do not support empty
	text nodes, either. Opera 9 does, as well as all other tested S60 WebKits.</li>

	<li>Almost the same browser compatibility pattern applies to the <code>nodeValue</code> of
	comments: Opera 8, Blackberry and the S60 WebKit on the Samsung i560 return <code>//</code>
	instead of the comment&#8217;s text content.</li>

	<li>The relation between Opera desktop and Opera Mobile remains strong: typical Opera bugs
	such as the impossibility of removing event handlers with <code>removeAttribute()</code>,
	as well as its IE-like take on <code>getElementsByName()</code> also occur on all tested mobile
	versions.</li>
</ul>

<p>All in all these bugs are not very important. Nobody ever uses <code>getElementsByName()</code>
or the <code>nodeValue</code> of comments, while we remove event handlers by specialised event
methods and have learned to work around the empty text node issue. Only the S60 WebKit bugs are
annoying, and even they can be worked around.</p>

<p>Still, these bugs have their use as marker bugs; that is, as bugs that show how well (or badly)
a certain browser is progressing, and that allows us to estimate its relation to other browsers.</p>

<p>I was saddened by the differences
between S60 WebKit on the Samsung on the one hand, and those on the Nokia on the other. Until now
I dared to assume that there&#8217;s only one S60 WebKit, but it turns out there are
differences between Nokia and Samsung after all.</p>

<p>Fortunately Nokia remains by far the most important
vendor of S60 devices, so I assume web developers are going to ignore the Samsung S60 WebKit&#8217;s
differences. In the end, they will remain Samsung&#8217;s problem, not web developers&#8217;.</p>

<p>What puzzles me is the fact that two totally unrelated bugs occur in Opera 8, S60 WebKit Samsung,
and Blackberry. What&#8217;s the common denominator of these browsers? What&#8217;s the common
denominator of empty text nodes and a faulty comment <code>nodeValue</code>? I have no idea.</p>

<p>The chances of exactly these two (apparently unrelated) bugs occurring
in the same three browsers (that do not share a code base) are small enough to wonder and worry.</p>

<p>I have no solutions, only more questions.</p>

<p>Still, we can now take as a given that the DOM Core support of all mobile browsers, including
Blackberry and NetFront, is decent. Their problems are mostly located in performance: there Blackberry
and NetFront have to take a back seat to Opera and all WebKits.

<p>More research is clearly necessary.</p>
]]>
</content>
</entry>
<entry>
<title>A note on testing methodology</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/05/a_note_on_testi.html" />
<modified>2009-05-20T13:34:56Z</modified>
<issued>2009-05-20T13:33:37Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1743</id>
<created>2009-05-20T13:33:37Z</created>
<summary type="text/plain"><p>In his recent Feature testing CSS properties entry, Juriy Zaytsev (Kangax) discusses the possibility of detecting CSS support by means of JavaScript. Although he rightly points out that this method has its drawbacks, as far as I&amp;#8217;m concerned he doesn&amp;#8217;t go far enough.

This sort of testing should not be used at all. Ever. The methodology is plain wrong. Browser compatibility tests are to be done by hand. Any automated system is useless, because it will give false information.
</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Theory</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>In his recent <a href="http://thinkweb2.com/projects/prototype/feature-testing-css-properties/" class="external">Feature testing CSS properties</a> entry, Juriy Zaytsev (Kangax) discusses the possibility of detecting CSS support by means of JavaScript. Although he rightly points out that this method has its drawbacks, as far as I&#8217;m concerned he doesn&#8217;t go far enough.</p>

<p>This sort of testing should not be used at all. Ever. The methodology is plain wrong. Browser compatibility tests are to be done by hand. Any automated system is useless, because it will give false information.</p>
]]>
<![CDATA[<h3>Testing and testing</h3>

<p>Before we continue we should make a distinction between performance, network, and compatibility testing. The first two can be automated &#8212; in fact, the whole point of performance tests is to measure the time a script needs to execute, which makes an automated set-up almost mandatory. Networking tests, too, can easily be automated (as <a href="http://stevesouders.com/ua/" class="external">Steve Souders has done</a>).</p>

<p>Compatibility tests, however, cannot be automated. I&#8217;ve thought about this problem for quite a while since starting my <a href="/m/">mobile compatibility work</a>, but a quick test last Thursday proved conclusively that testing CSS by means of JavaScript is just plain wrong.</p>

<h3>CSS tests in JavaScript</h3>

<p>In theory, testing CSS compatibility by means of JavaScript is quite elegant. Kangax gives this example:</p>

<pre>
 if (docEl && (s = docEl.style)) {
      return typeof s.borderRadius == "string"
        || typeof s.MozBorderRadius == "string"
        || typeof s.WebkitBorderRadius == "string"
        || typeof s.KhtmlBorderRadius == "string";
  }
</pre>

<p>See if there&#8217;s a property <code>style.borderRadius</code> and see if it contains a string (instead of <code>undefined</code>). If that&#8217;s the case, the browser (apparently) supports CSS <code>border-radius</code>.</p>

<p>Now I do not doubt that this approach works fine in the current crop of desktop browsers. It fails abysmally, however, on some mobile phones, as we&#8217;ll see in a moment.</p>

<p>Besides, this test does not prove anything about CSS <code>border-radius</code>. Instead it says something about JavaScript <code>style.borderRadius</code>.</p>

<p>Sure, these two properties are supposed to reflect the same bit of data, but what if they don&#8217;t? Suppose there&#8217;s a browser bug that doesn&#8217;t allow you access to <code>style.borderRadius</code> while <code>border-radius</code> works fine? Or vice versa? The test might return false positives or false negatives.</p>

<p>More in general, this testing methodology <em>assumes</em> that no browser will ever make a mapping mistake between CSS and JavaScript. That means that an entire category of bugs will never be discovered by such tests, and &#8212; worse &#8212; that the tests may generate false positives or negatives.</p>

<p>This is not just a random theoretical musing. I actually found such a bug. At least four mobile browsers will return a false positive when this testing methodology is used on <code>font-style: italic</code>.</p>

<p>If this methodology doesn&#8217;t work for <em>one single browser</em>, it is inherently untrustworthy. After all, any testing methodology <em>must</em> work everywhere, or it is worthless.</p>

<h3>The <code>font-style: italic</code> problem</h3>

<p>As I think I said before, I discovered that some basic CSS such as <code>font-style: italic</code> does not work in certain mobile browsers (Opera Mobile &lt; 9 in mobile mode , Opera Mini, and Bolt). We&#8217;ll leave the whys and wherefores for another day, and concentrate on the aspect I tested last Thursday.</p>

<p>What I did then is change the <a href="/m/tests/basiccss.html">test page</a> a bit in order to include a simple JavaScript test:</p>

<pre>
&lt;p style="font-style: italic" id="test"&gt;font-style: italic&lt;/p&gt;
&lt;script&gt;
document.write(document.getElementById('test').style.fontStyle);
&lt;/script&gt;
</pre>

<p>If a browser does not support <code>font-style: italic</code>, so the theory goes, <code>style.fontStyle</code> would be empty, too. The point is, it isn&#8217;t.</p>

<p>Two Opera Mobiles, Opera Mini, and Bolt all faithfully reported <code>italic</code>, even though they do not support <code>font-style: italic</code> (or, let&#8217;s put this more precisely, they do not use an italicised font for rendering the test paragraph).</p>

<p>These browsers do not support <code>font-style: italic</code> in any meaningful way, but an automated testing system based on JavaScript <code>style.fontStyle</code> would report that they do in fact support the CSS property. It would give a false positive.</p>

<p>This false positive conclusively proves that testing CSS compatibility by means of JavaScript does not work. (Remember, <em>one single</em> false result is enough to invalidate the entire approach.)</p>

<p>Testing CSS compatibility by means of JavaScript is methodologically unsound and should be avoided at all costs. CSS compatibility tests (and probably the JavaScript ones, too) <em>must</em> be done by hand, by creating a test page and looking at them. Automated systems are just not going to work.</p>
]]>
</content>
</entry>
<entry>
<title>Presentations at Yahoo!, Google, Voices that Matter and Amsterdam Widget Camp</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/05/presentations_a.html" />
<modified>2009-05-04T16:22:09Z</modified>
<issued>2009-05-04T16:20:40Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1735</id>
<created>2009-05-04T16:20:40Z</created>
<summary type="text/plain"><p>Phew, the last two weeks have been a blast, but also a bit tiring. I went on a visit to San Francisco in order to speak at the Voices That Matter Web Design Conference, and since I was in town anyway both Yahoo! and Google invited me to do a tech talk. I returned home on Friday, and on Saturday I spoke at the Amsterdam Widget Dev Camp organised by Vodafone NL. Fun, but wearing.

Here are the links to my presentations.</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Conferences</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>Phew, the last two weeks have been a blast, but also a bit tiring. I went on a visit to San Francisco in order to speak at the <a href="http://voicesthatmatter.com" class="external">Voices That Matter Web Design Conference</a>, and since I was in town anyway both Yahoo! and Google invited me to do a tech talk. I returned home on Friday, and on Saturday I spoke at the Amsterdam <a href="http://widgetdevcamp.nl/" class="external">Widget Dev Camp</a> organised by Vodafone NL. Fun, but wearing.</p>

<p>As you may know by now, I&#8217;m currently heavily engaged in<a href="/blog/archives/2009/04/introduction_to.html">W3C Widgets</a> research, so it&#8217;s no surprise that three out of four of my presentations treated this topic. As usual I&#8217;ve put the slides online.</p>

]]>
<![CDATA[<ol>
	<li>I started with a <a href="/presentations/sf09/yahoo.pdf">Yahoo! presentation</a> about JavaScript Events, treating the key events, delegating the focus and blur events through capturing (and not bubbling!), the change event, and I ended with a quick peek at some ways in which mobile browsers try to support the fundamentally alien desktop event model.<br>
	Yahoo! <a href="http://yuiblog.com/blog/2009/04/27/video-ppk-jsevents/" class="external">recorded and published</a> my presentation for your viewing pleasure.</li>
	<li>The next day, in my <a href="/presentations/sf09/google.pdf">Google presentation</a>, I gave an overview of the current mobile browser market as well as W3C Widgets. I called upon the Google Android team to start supporting W3C Widgets, too; unfortunately I have no idea how (un)convincing I was. I finished by pointing out some possible security problems in W3C Widgets.<br>
	Google, too, <a href="http://google-code-updates.blogspot.com/2009/04/ppk-open-web-goes-mobile.html" class="external">recorded and published</a> my presentation for your extended viewing pleasure.</li>
	<li>Then I got three days of rest before my <a href="/presentations/sf09/vtm.pdf">Voices that Matter presentation</a>. It partly repeated the Yahoo! presentation, but also contains some new material. I did not talk about the mobile browsers; frankly VTM is not a terribly tech-oriented conference, and I think even hardened JavaScript programmers would be put off by the mobile stuff, let alone VTM visitors who overwhelmingly came from the graphic and UX side of things.</li>
	<li>Then I had one day without presentations before flying back home and giving my <a href="/presentations/widgetcamp/widgetcamp.pdf">Widget Camp presentation</a>. It partly repeats the Google one, but I added some information about the <code>widget</code> object and the config.xml file any widget needs.</li>
</ol>

<p>At the urging of Jon Boutelle I became a <a href="http://www.slideshare.net/pp.koch" class="external">SlideShare member</a> and uploaded my presentations there, too.</p>

<div class="smaller">
<p>(By the way, just a few hours ago I read <a href="http://adactio.com/journal/1573" class="external">Jeremy&#8217;s article about GeoCities being destroyed</a>. Jeremy is concerned that this may happen to other services, too, and is not happy with this state of affairs.</p>

<p>I disagree with him; as far as I&#8217;m concerned the problem lies with people who put vital content <em>only</em> on external services instead of at their own site, where it belongs. If the data is important to you, keep a local copy. If you don&#8217;t, anything that happens next is your own fault.</p>

<p>That&#8217;s why I consider the slides here on QuirksMode.org the official and canonical ones, and the SlideShare ones mere copies meant only to give my readers and followers easier access and sharing possibilities. Should, God forbid, anything happen to SlideShare later on, no lasting harm will be done.)</p>

</div>

]]>
</content>
</entry>
<entry>
<title>Voices That Matter JavaScript Events + Y! video</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/04/voices_that_mat_1.html" />
<modified>2009-04-28T20:15:30Z</modified>
<issued>2009-04-28T20:05:38Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1728</id>
<created>2009-04-28T20:05:38Z</created>
<summary type="text/plain"><p>I&apos;ve just put my Voices That Matter presentation online (PDF, 600K); and also on Slideshare

This presentation overlaps with my recent Yahoo! one for about 40%, and it&apos;s somewhat more basic. (Still, it was the most advanced JavaScript presentation at the conference.)</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Conferences</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>I've just put my <a href="/presentations/sf09/vtm.pdf">Voices That Matter presentation</a> online (PDF, 600K); and I've also published it on <a href="http://www.slideshare.net/pp.koch" class="external">Slideshare</a>.</p>

<p>This presentation overlaps with my recent Yahoo! one for about 40%, and it's somewhat more basic. (Still, it was the most advanced JavaScript presentation at the conference.)</p>

<p>By the way, the good people at Yahoo! have already <a href="http://yuiblog.com/blog/2009/04/27/video-ppk-jsevents/" class="external">published the video of my presentation</a>; including a complete transcript (it's odd to read through it).</p>

<p>As I said during my VTM presentation, the Yahoo! one contains the solution to the focus/blur event delegation thing, as well as some information on events in the mobile browsers.</p>]]>

</content>
</entry>
<entry>
<title>Google presentation: The Open Web goes mobile</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/04/google_presenta.html" />
<modified>2009-04-25T00:50:34Z</modified>
<issued>2009-04-25T00:42:10Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1727</id>
<created>2009-04-25T00:42:10Z</created>
<summary type="text/plain"><p>The slides of my Google presentation are now online (PDF, 841K).

This presentation, too, has been taped and will be published online. I&apos;ll let you know when that happens.

I also caved in to Jon Boutelle&apos;s peer pressure and now publish my slideshows on Slideshare.net; including this one.
</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Conferences</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>The slides of my Google presentation are now <a href="http://quirksmode.org/presentations/sf09/google.pdf">online</a> (PDF, 841K).</p>

<p>This presentation, too, has been taped and will be published online. I'll let you know when that happens.</p>

<p>I also caved in to Jon Boutelle's peer pressure and now <a href="http://www.slideshare.net/pp.koch" class="external">publish my slideshows on Slideshare.net</a>; including this one.</p>

]]>
<![CDATA[<div style="width:425px;text-align:left" id="__ss_1339534"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/pp.koch/google-presentation-the-open-web-goes-mobile?type=powerpoint" title="Google presentation: The Open Web goes mobile">Google presentation: The Open Web goes mobile</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=google-090424184514-phpapp02&stripped_title=google-presentation-the-open-web-goes-mobile" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=google-090424184514-phpapp02&stripped_title=google-presentation-the-open-web-goes-mobile" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/pp.koch">Peter-paul Koch</a>.</div></div>]]>
</content>
</entry>
<entry>
<title>Yahoo! presentation on JavaScript Events</title>
<link rel="alternate" type="text/html" href="http://www.quirksmode.org/blog/archives/2009/04/yahoo_presentat.html" />
<modified>2009-04-24T15:31:07Z</modified>
<issued>2009-04-24T03:03:42Z</issued>
<id>tag:www.quirksmode.org,2009:/blog//1.1726</id>
<created>2009-04-24T03:03:42Z</created>
<summary type="text/plain"><p>The slides of my Yahoo! presentation on JavaScript Events are online (PDF, 1.7M).

The presentation has been taped and will eventually be published online; I&apos;ll let you know when that happens.</p></summary>
<author>
<name>ppk</name>
<url>http://www.quirksmode.org/</url>
<email>ppk@xs4all.nl</email>
</author>
<dc:subject>Conferences</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.quirksmode.org/blog/">
<![CDATA[<p>The slides of my Yahoo! presentation on JavaScript Events are <a href="/presentations/sf09/yahoo.pdf">online</a> (PDF, 1.7M).</p>

<p>The presentation has been taped and will eventually be published online; I'll let you know when that happens.</p>

]]>
<![CDATA[<div style="width:425px;text-align:left" id="__ss_1337458"><a href="http://www.slideshare.net/pp.koch/yahoo-1337458?type=presentation" title="Yahoo">Yahoo</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=yahoo-090424092706-phpapp02&stripped_title=yahoo-1337458" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=yahoo-090424092706-phpapp02&stripped_title=yahoo-1337458" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/pp.koch">pp.koch</a>.</div>]]>
</content>
</entry>

</feed>