Wednesday, May 04, 2005

Opera, Konqueror, and Safari

A significant amount of time this week was spent on the addition of support for Konqueror (3.4) and Opera (8.0) browsers. I'm very excited about the idea of having more browsers supported. In addition to making the software available to a wider audience, they act as an additional check to make sure we're doing things right with regard to Web standards.

The major hang-up for supporting Opera8 turned out to be nothing more than Echo2 misreading Opera's user-agent tag. Opera8 uses a somewhat deceptive user-agent header by default, identifying itself partially as Internet Explorer. Echo2 was failing to notice the "Opera" part of the user-agent header, and was thus turning on all the "quirk flags" in Echo2 associated with Internet Explorer. This causes some significant changes in Echo's rendering behavior, such as rendering using IE's proprietary "CSS expressions" instead of using the conventional CSS2 "right" and "bottom" properties that are unsupported by IE... not a good thing for non-IE clients. A few other issues were run into...notably Opera's lack of support for the setRequestHeader() method in its XMLHttpRequest implementation.

The goal with Alpha9 was to also support Safari, which I was hopeful would be a given once we had Konqueror support in place, as Safari is a derivative of Konqueror. I picked up a Mac Mini this week from the Apple Store, largely for this purpose, and so far I've found Safari support to be frustrating to say the least. Echo2 appeared to work well in limited testing with Safari 1.3 (that which is included with OSX 10.3/Panther). Things took a sharp turn for the worse once I upgraded to Safari2 w/ OSX 10.4/Tiger though. After a bit of testing it seems that there may be a bug in Safari where the document.importNode() does not work as expected when importing HTML fragments from an XML dcoument received via XMLHttpRequest. Safari2 does not seem to import CSS style attributes or element ids from the HTML fragment (and we are setting the namespaces correctly). I've whipped up a simplified test case of this issue, but still need to find a way to get it in front of the Safari devs.

Note that all the above changes aren't quite out yet, though they are in the Echo2 Subversion repository. They will be out very soon, i.e., hopefully tonight, with alpha9.

And as a total, is Mac OS X gorgeous! I'm finding myself being sucked toward it more and more from my usual Red Hat Linux / Fedora Core 3 workstation.


Welcome to the Echo2 blog. I'm getting a bit of a late start on this, 'this' being both blogging in general and blogging Echo2 development.

If you're unfamiliar with Echo2, well, it's a web application framework of sorts... a component-oriented/event-driven/don't-write-any-HTML API backed up by an AJAX-based rendering engine. The idea is to provide an API that looks like a user-interface toolkit so the end-developer doesn't have to concern him/herself with the general nonsense of web development. The AJAX piece on the back-end keeps the state of the browser in-sync with the server-side application by performing fine-grained manipulations to the browser's DOM. Every update to the client is the smallest modification possible, so there are no page refreshes, and thus the response time is very, very fast.

A slightly more thorough overview can be found in this article on TheServerSide. But the best explanation can probably be had from seeing the online demo/test application.

As of this writing, the ninth alpha release of Echo2 is on its way out the door. This release sees the introduction of Checkbox and RadioButton widgets and better support for a couple more browsers, notably Konqueror and Opera. At this point the only truly "critical" widgets that are missing are Tables, SelectFields, and ListBoxes...all of which are coming very soon. The core API has mostly taken shape, but there are a few significant design decisions that have yet to be made.

In any case, I'm very much looking forward to adding blog entires and hope to do so very soon.

Best regards
--Tod Liebeck