- From: Justin Lebar <justin.lebar@gmail.com>
- Date: Thu, 12 Nov 2009 11:22:17 -0800
> "The title [argument to pushState] is purely advisory. User agents might use the title in the user interface." > > But unlike the URL which actually changes in the Document object and is therefore exposed to the DOM, this "purely advisory" title change is hidden from the DOM. ?I'm questioning the reasoning behind this distinction and am curious if it was intentional or not. What I did in my Firefox patch (which should be checked into trunk within a few weeks, I hope) is use that title only to identify the history entry in the pull-down back-forward menu (what's shown when you click the down arrow next to the forward button in Firefox). If you want the rest of the UI (e.g. browser title bar) to match up with this title, you have to set document.title. ?In fact, if you pushState with title 'Foo', then navigate back and then forward, the history entry's title will be reset to the document's title. ?(I intend to write something detailing tricks like these once we land the pushState patch.) On the one hand, the implementation as it is allows developers some control over the history entry title independent of the document title, and perhaps that's useful. ?On the other hand, most use cases I can imagine for setting the history entry title are only useful if it persists between back/forwards. It appears in my testing that if you do pushState("title1"); document.title="title2" Firefox shows "title2" in both the local and global history, so setting document.title appears to subsume most of the functionality of pushState's title argument. We could make the API change document.title and remember that change between back/forwards, but I think that would be unnecessarily complicated. After a pushState, you'd get a new document which shares all mutable state *except* its title with its sibling. Unless there's a compelling use for it, perhaps we should simplify the API by getting rid of the title parameter altogether. ?One can pretty easily update document.title on popStates manually. ?But perhaps I'm missing something; I recall at one time being convinced that the title parameter was important. ?:) > [Given] A1 - A2 - B1 - *B2* - B3 - C1 - C2 > >> "When this method is invoked, the user agent must remove from the session history all the entries from the first state object entry for that Document object up to the last entry that references that same Document object, if any." > > In my original message I liberally interpreted this to mean the new current entry should be a copy of "B3" but without the state object because, clearly, we just "removeState()"ed. I don't think removing the entry from the history implies that we clear its state object. Certainly the spec could be clarified, however. I don't think that Marius's reading, here that B1, B2, and B3 would all be removed, is completely unsupported by the text. But I also don't think that's what we want. If I understand things correctly, we always remove the current entry after a clearState. So perhaps the language could be "When this method is invoked, the user agent must remove from the session history all the entries from the first state object entry for that Document up to the second-to-last entry that references the same Document. The current entry is then set to the one remaining entry for the Document." That said, we didn't implement clearState when we did push/replaceState because it's hard to get right and we don't currently have a compelling use case. There are probably lots of things we'd change if we were going to implement it -- for instance, why go back to the last entry instead of staying at the current one? But that's probably a conversation for another thread. -Justin
Received on Thursday, 12 November 2009 11:22:17 UTC