I don't think it'll ever be as simple as write once, deploy anywhere ... but write once, in one language, and deploy everywhere with minimal fuss is an admirable goal.
It's a problem that companies have been trying to solve, in one form or another, since the advent of the microcomputer.
I'm highly sceptical that a solution is ever going to appear. There is no silver bullet that will allow you to paper over the significant differences in platforms in a transparent, non-clunky manner.
On the other hand, when you're natively targeting several platforms with radically different UI conventions outside of the browser, it's a lot harder to provide a single language and library set that can cover up those differences. You could go for the browser strategy and attempt to convince users that your application is exempt from the underlying OS conventions because it's special, but that's a steep uphill climb (especially with users bases known to be hostile to applications which deviate from expected conventions, like the Apple community; god help you if you're trying to sell an Adobe Air app on OS X).
Like I said, there is no silver bullet here. You can't get polished interfaces on multi-platforms if you're not willing to polish your interface separately for each platform.
But let’s get to the real issue here, because this is once again a misunderstanding of design vs. programming. HTML, JS, and CSS do not magically create wonderful experiences on every platform they are run. As you can see from the above screenshot, they certainly have the nice side effect of working on said platforms, but if you’re expecting HTML to somehow handle the subtle and explicit differences between a handheld multitouch peripheral and a desktop application, well then you’re doing it wrong. These are completely different environments and they require completely different designs and often implementations.
http://www.alertdebugging.com/2009/11/04/mockingbird-cappucc...