Thursday, November 22, 2007

Progressive Enhancement++

First off, I don't mean to imply Wikipedia is fact.

According to Wikipedia, "Progressive Enhancement consists of the following core principles:
* basic content should be accessible to all browsers
* basic functionality should be accessible to all browsers
* sparse, semantic markup contains all content
* enhanced layout is provided by externally linked CSS
* enhanced behavior is provided by unobtrusive, externally linked JavaScript
* end user browser preferences are respected"

I'll ignore the problems defining what constitutes "content" in the world of DHTML applications, but notice above the reference to unobtrusive JavaScript. According to Wikipedia, one of the basic principles of unobtrusive JavaScript is "Graceful degradation in browsers that are unable to express the behavior layer in the desired manner"

I'm not terribly fond of this latter principle. A bit strange for an accessibility guy eh? Well. JavaScript is a great language, is becoming available in all sorts of places (including browsers on mobile devices), and can now be made accessible using ARIA. In fact, when DHTML is designed well, and using an ARIA enabled browser like Firefox, the experience for users of assistive technology can be greatly improved.

I don't think there is a term for what I see as an alternate design strategy: one that looks a lot like progressive enhancement, but does not strive to work in a JavaScript-less environment.


danguy said...

I use NoScript to browse the Internet with JavaScript disabled (Also Flash, Java, Media Embedding, and Fonts. (Seriously, everything is Bitstream Vera Serif 16pt+)), because it greatly reduces annoyances. (Not to mention ads.)

I think that it is critical for all websites to work without JavaScript (and other features).

BTW, GMail does, Facebook does not.

davidb said...

Just dropping in to add a link from JavaScript expert, Douglas Crockford on Unobtrusive JavaScript.

Anonymous said...

I think this boils down to whether or not you think the web should be an application platform or not.

Hosting applications is not what HTML was designed to do - it is a markup language, not a programming language.

Personally I think 99% of what people want Javascript for is fluff, and the web would be better off if people went back to it's original ideals, and began concentrating on *information* rather than Flash. Thus, I also browse with Javascript disabled.

davidb said...

I understand that position. Makes me think back to Roy Fielding's dissertation on REST. Since I feel the need for accessibility solutions to stay on the front of technology innovation, I can't ignore the way the web is going.

davidb said...

I just read my last comment and it comes off snarky. I think maybe I also come off as confident about the way the web is going. I'm not.

Anonymous said...

I'm actually a big REST fan, so I missed any snark :) I, personally, think you are completely correct in that ignoring Javascript would be ignoring where the web is heading - perhaps as a direct result of most web authors not applying principles of "Progressive Enhancement". But it's exactly that predicted direction which my comment was railing against. I think the only place our opinions diverge is that I am certainly not eager to see Javascript become a requirement for the web. To be clear though, I have no problem seeing it used where it's truly needed - for me, it's just a question of focus.

davidb said...

Yeah, REST rocks.

You make some really good points, and I like your thinking.

Actually I'm not sure we diverge as much as you might think. Sometimes I think the web might have been better left alone... with the original resource centric vision.

Aquarius said...
This comment has been removed by the author.
Stuart Langridge said...

I think the distinction is that there are, really, three classes of browser if we're talking about JavaScript: those with no JS at all, those with old DOM-0 JS, and those with modern DOM scripting support. There's little point striving hard to include DOM-0 browsers (like Netscape 4) in your scripting, because the browser simply doesn't have the support required, and there aren't that many people using browsers like that. So, the idea is that you start with no scripting at all and then progressively enhance the sites/applications you build with scripting such that you get a better experience in DOM-scripting-capable browsers -- those with DOM-0 support get classed as "no scripting at all", but since the site/app should be usable in that state anyway it all works out.