Flash today, canvas tomorrow.
Canvas is looking really promising, and there are some impressive demos around. In chrome, the performance of Canvas is on par with flash, so you'd be able to make games that compete quite well. (disclaimer, I'm professionally involved in the creation of javascript/dom based games and programs)
But the main reason that you should still go with flash? Sound. The native browser apis for sound are so pathetic. You can use soundmanager2, (which wraps the flash api, and a hidden flash movie, in a javascript api), but the capabilities of that are limited by the latency of the flash/javascript bridge.
The audio tag support in new browsers should make some headway, but what is proposed is not very competitive with flash's audio capabilities.
Nevertheless, give it about 2 or 3 years and I'm willing to bet that the choice will look a lot less obvious.
However, if you don't mind making a mute game, or slick sound isn't very important, and you don't mind it being dog slow in IE, then go with canvas.
Silverlight isn't even in the running, don't make me laugh.