OK, but websites have used alert() since the dawn of time to trap you on the site with an endless stream of annoying modal dialogs. If this ever catches on, browsers will do exactly what most have done with alert(): if the webpage calls it more than X times a second, the browser asks you, "Do you want to allow Site X to continue to screw with your location bar?" and you can say No.
It isn't too likely to catch on, I think. Unlike the modal alert()s, changing the address bar doesn't prevent one from just closing the tab that has the page in it. Sure, you lose whatever history got you to that site, but I find my history is rarely more than 5-10 links deep, since I tend to spawn new tabs rather than using the current one.
> On Chrome, the same thing happens, but it’s even worse. Every replaceState call not only wipes out the location bar, but it cancels navigate events too.
This didn't happen for me on Chromium 9.0.597.107 (75357) on Ubuntu 10.04. I clicked on the address bar and it stopped scrolling while the pointer was focused there.
I'm able to type into the location bar on Chrome 11 on Ubuntu 10.10, but pressing Enter or clicking one of the suggestions has no effect (i.e. the animation keeps running and the navigation is canceled).
This API exists for that precise purpose. If you want to "navigate" your AJAX application to a new logical page, you use this API to do the navigation, and you supply a state that helps the browser return to the previous logical page when the user hits the back button. (And the same when they hit the forward button.) And you use real URIs, which when the user copies and pastes them will navigate properly to that page without the AJAX magic.
You can recreate the effect by going to your history listing and scrolling up and down. Kinda like those pages with tiled backgrounds that create epilepsy-inducing strobe effects when scrolled.