Last week I mentioned Greasemonkey, a Firefox extension that enables scripts to run in the context of web pages. Since then I've written a few of my own Greasemonkey scripts. The first, which I've shown in a screencast, is a next-generation LibraryLookup. Originally you had to click a bookmarklet in order to jump from an Amazon page to a book's record in your local library. Now, if the book is available in the library, the Greasemonkey script automatically inserts an alert into the Amazon page. As I discuss in the screencast, page rewriting is a hot topic that's about to go nuclear.
Two components make this possible. One is the scriptable DOM (document object model), which enables in-situ alteration of web pages. The other is the XmlHttpRequest object which is now available in all the major browsers, and which supports asynchronous interaction with remote services.
A few weeks back, in a comment posted to Dare Obasanjo's blog, Adam Bosworth noted that the "auction demo" -- which I saw him present in, I think, 1997 -- was the model for AJAX. Jean Paoli, who I joined this week on a panel along with Tim Bray, told me with great amusement that an InfoPath team member recently announced: "Hey, we're an AJAX application!" As I point out in the column, there's nothing new about AJAX.
Greasemonkey, though, does seem to open up uncharted territory. As I've mentioned before, a user of Gmail was able to add persistent search folders to the application. When search folders were added to Outlook, in version 11, everyone made a big deal about it, and rightly so. It's a major feature. Now I use search folders in Gmail every day, the feature is indistinguishable from the core application, and it was created by a user!
This kind of customization makes the already attractive notion of software as a service even more compelling. Imagine that your company subscribes to a hosted web app, and it's mostly great, but there are a couple of features you wish you could offer your people, and the vendor isn't coughing them up in a timely way. In an AJAX world you might have a pretty good shot at doing it yourself.
Former URL: http://weblog.infoworld.com/udell/2005/04/14.html#a1215