HTML Standard Tracker

Diff (omit for latest revision)
Filter

Short URL: http://html5.org/r/5964

File a bug

SVNBugCommentTime (UTC)
596412277[Authors] [Gecko] [Internet Explorer] [Opera] [Webkit] Revamp pushState() to work like Firefox 4, since that actually makes the API useful. See also http://hacks.mozilla.org/2011/03/history-api-changes-in-firefox-4/, WHATWG mail, and the bug below.2011-03-25 00:55
Index: source
===================================================================
--- source	(revision 5963)
+++ source	(revision 5964)
@@ -68578,6 +68578,7 @@
 
   <pre class="idl">interface <dfn>History</dfn> {
   readonly attribute long <span title="dom-history-length">length</span>;
+  readonly attribute any <span title="dom-history-state">state</span>;
   void <span title="dom-history-go">go</span>(in optional long delta);
   void <span title="dom-history-back">back</span>();
   void <span title="dom-history-forward">forward</span>();
@@ -68595,6 +68596,14 @@
 
    </dd>
 
+   <dt><var title="">window</var> . <code title="dom-history">history</code> . <code title="dom-history-state">state</code></dt>
+
+   <dd>
+
+    <p>Returns the current <span>state object</span>.</p>
+
+   </dd>
+
    <dt><var title="">window</var> . <code title="dom-history">history</code> . <code title="dom-history-go">go</code>( [ <var title="">delta</var> ] )</dt>
 
    <dd>
@@ -68679,6 +68688,11 @@
 
   <p>The actual entries are not accessible from script.</p>
 
+  <p>The <dfn title="dom-history-state"><code>state</code></dfn>
+  attribute of the <code>History</code> interface must return the last
+  value it was set to by the user agent. Initially, its value must be
+  null.</p>
+
   <p>When the <dfn title="dom-history-go"><code>go(<var
   title="">delta</var>)</code></dfn> method is invoked, if the
   argument to the method was omitted or has the value zero, the user
@@ -68895,18 +68909,10 @@
 
    <li>
 
-     <p>If the <span>current document readiness</span> is not yet set
-     to the string "complete", let the <code>Document</code>'s
-     <span>pending state object</span> be another <span>structured
-     clone</span> of the specified <var title="">data</var>. (If there
-     was already a <span>pending state object</span>, the previous one
-     is discarded.)</p>
+     <p>Set <code title="dom-history-state">history.state</code> to
+     another <span>structured clone</span> of the specified <var
+     title="">data</var>.</p>
 
-     <p class="note">This ensures that the <code
-     title="event-popstate">popstate</code> event that will be fired
-     when the document finally loads will accurately reflect the
-     pushed or replaced state object.</p>
-
    </li>
 
   </ol>
@@ -69013,7 +69019,7 @@
    document.forms.F.I.value = newI;
  }
 &lt;/SCRIPT>
-&lt;BODY ONPOPSTATE="recover(event.state)">
+&lt;BODY ONPOPSTATE="set(event.state)">
 &lt;FORM NAME=F>
 State: &lt;OUTPUT NAME=I>1&lt;/OUTPUT> &lt;INPUT VALUE="Increment" TYPE=BUTTON ONCLICK="inc()">
 &lt;/FORM></pre>
@@ -70488,41 +70494,18 @@
    state object. Otherwise, let <var title="">state</var> be
    null.</p></li>
 
-   <li>
+   <li><p>Set <code title="dom-history-state">history.state</code> to <var
+   title="">state</var>.</p></li>
 
-    <p>Run the appropriate steps according to the conditions
-    described:</p>
+   <li><p>Fire a <code title="event-popstate">popstate</code> event at
+   the <code>Window</code> object of the <code>Document</code>, using
+   the <code>PopStateEvent</code> interface, with the <code
+   title="dom-PopStateEvent-state">state</code> attribute set to the
+   value of <var title="">state</var>. This event must bubble but not
+   be cancelable and has no default action.</p></li>
 
-    <dl class="switch">
-
-     <dt>If the <span>current document readiness</span> is set to the
-     string "complete"</dt>
-
-     <dd><p><span>Queue a task</span> to fire a <code
-     title="event-popstate">popstate</code> event at the
-     <code>Window</code> object of the <code>Document</code>, using
-     the <code>PopStateEvent</code> interface, with the <code
-     title="dom-PopStateEvent-state">state</code> attribute set to the
-     value of <var title="">state</var>. This event must bubble but
-     not be cancelable and has no default action.</p></dd>
-
-     <dt>Otherwise</dt>
-
-     <dd><p>Let the <code>Document</code>'s <span>pending state
-     object</span> be <var title="">state</var>. (If there was already
-     a <span>pending state object</span>, the previous one is
-     discarded.)</p>
-
-     <p class="note">The event will then be fired just after the <code
-     title="event-load">load</code> event.</p></dd>
-
-    </dl>
-
-   </li>
-
-   <li><p>If <var title="">hash changed</var> is true, then
-   <span>queue a task</span> to fire a <code
-   title="event-hashchange">hashchange</code> event at the
+   <li><p>If <var title="">hash changed</var> is true, then fire a
+   <code title="event-hashchange">hashchange</code> event at the
    <span>browsing context</span>'s <code>Window</code> object, using
    the <code>HashChangeEvent</code> interface, with the <code
    title="dom-HashChangeEvent-oldURL">oldURL</code> attribute set to
@@ -70536,12 +70519,6 @@
 
   </ol>
 
-  <p>The <dfn>pending state object</dfn> is used to keep track of what
-  state object to use in the inital <code
-  title="event-popstate">popstate</code> event fired by the parser
-  once it <span title="stop parsing">stops parsing</span>. The
-  <span>pending state object</span> must be initially null.</p>
-
   <p>The <span>task source</span> for the tasks mentioned above is the
   <span>DOM manipulation task source</span>.</p>
 
@@ -98038,16 +98015,6 @@
    attribute set to false. This event must not bubble, must not be
    cancelable, and has no default action.</p></li>
 
-   <li><p>If the <code>Document</code> is in a <span>browsing
-   context</span>, then <span>queue a task</span> to fire a <code
-   title="event-popstate">popstate</code> event at the
-   <code>Document</code>'s <code>Window</code> object using the
-   <code>PopStateEvent</code> interface, with the <code
-   title="dom-PopStateEvent-state">state</code> attribute set to the
-   current value of the <span>pending state object</span>. This event
-   must bubble but not be cancelable and has no default
-   action.</p></li>
-
    <li><p>If the <code>Document</code> has any <span>pending
    application cache download process tasks</span>, then <span
    title="queue a task">queue</span> each such <span

|