Skip to content

Commit

Permalink
[agiow] (1) Revamp pushState() to work like Firefox 4, since that act…
Browse files Browse the repository at this point in the history
…ually makes the API useful. See also http://hacks.mozilla.org/2011/03/history-api-changes-in-firefox-4/, WHATWG mail, and the bug below.

Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=12277

git-svn-id: http://svn.whatwg.org/webapps@5964 340c8d12-0b0e-0410-8428-c7bf67bfef74
  • Loading branch information
Hixie committed Mar 25, 2011
1 parent 54c90b1 commit 4e57ced
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 163 deletions.
78 changes: 27 additions & 51 deletions complete.html
Expand Up @@ -239,7 +239,7 @@

<header class=head id=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
<hgroup><h1>Web Applications 1.0</h1>
<h2 class="no-num no-toc">Living Standard &mdash; Last Updated 24 March 2011</h2>
<h2 class="no-num no-toc">Living Standard &mdash; Last Updated 25 March 2011</h2>
</hgroup><p>You can take part in this work. <a href=http://www.whatwg.org/mailing-list>Join the working group's discussion list.</a></p>
<p><strong>Web designers!</strong> We have a <a href=http://blog.whatwg.org/faq/>FAQ</a>, a <a href=http://forums.whatwg.org/>forum</a>, and a <a href=http://www.whatwg.org/mailing-list#help>help mailing list</a> for you!</p>
<!--<p class="impl"><strong>Implementors!</strong> We have a <a href="http://www.whatwg.org/mailing-list#implementors">mailing list</a> for you too!</p>-->
Expand Down Expand Up @@ -60418,6 +60418,7 @@ <h4 id=the-history-interface><span class=secno>6.4.2 </span>The <code><a href=#h

<pre class=idl>interface <dfn id=history-0>History</dfn> {
readonly attribute long <a href=#dom-history-length title=dom-history-length>length</a>;
readonly attribute any <a href=#dom-history-state title=dom-history-state>state</a>;
void <a href=#dom-history-go title=dom-history-go>go</a>(in optional long delta);
void <a href=#dom-history-back title=dom-history-back>back</a>();
void <a href=#dom-history-forward title=dom-history-forward>forward</a>();
Expand All @@ -60433,6 +60434,14 @@ <h4 id=the-history-interface><span class=secno>6.4.2 </span>The <code><a href=#h

</dd>

<dt><var title="">window</var> . <code title=dom-history><a href=#dom-history>history</a></code> . <code title=dom-history-state><a href=#dom-history-state>state</a></code></dt>

<dd>

<p>Returns the current <a href=#state-object>state object</a>.</p>

</dd>

<dt><var title="">window</var> . <code title=dom-history><a href=#dom-history>history</a></code> . <code title=dom-history-go><a href=#dom-history-go>go</a></code>( [ <var title="">delta</var> ] )</dt>

<dd>
Expand Down Expand Up @@ -60515,6 +60524,11 @@ <h4 id=the-history-interface><span class=secno>6.4.2 </span>The <code><a href=#h

<p>The actual entries are not accessible from script.</p>

<p>The <dfn id=dom-history-state title=dom-history-state><code>state</code></dfn>
attribute of the <code><a href=#history-0>History</a></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 id=dom-history-go 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
agent must act as if the <code title=dom-location-reload><a href=#dom-location-reload>location.reload()</a></code> method was
Expand Down Expand Up @@ -60683,16 +60697,8 @@ <h4 id=the-history-interface><span class=secno>6.4.2 </span>The <code><a href=#h

<li>

<p>If the <a href=#current-document-readiness>current document readiness</a> is not yet set
to the string "complete", let the <code><a href=#document>Document</a></code>'s
<a href=#pending-state-object>pending state object</a> be another <a href=#structured-clone>structured
clone</a> of the specified <var title="">data</var>. (If there
was already a <a href=#pending-state-object>pending state object</a>, the previous one
is discarded.)</p>

<p class=note>This ensures that the <code title=event-popstate><a href=#event-popstate>popstate</a></code> event that will be fired
when the document finally loads will accurately reflect the
pushed or replaced state object.</p>
<p>Set <code title=dom-history-state><a href=#dom-history-state>history.state</a></code> to
another <a href=#structured-clone>structured clone</a> of the specified <var title="">data</var>.</p>

</li>

Expand Down Expand Up @@ -60798,7 +60804,7 @@ <h4 id=the-history-interface><span class=secno>6.4.2 </span>The <code><a href=#h
document.forms.F.I.value = newI;
}
&lt;/SCRIPT&gt;
&lt;BODY ONPOPSTATE="recover(event.state)"&gt;
&lt;BODY ONPOPSTATE="set(event.state)"&gt;
&lt;FORM NAME=F&gt;
State: &lt;OUTPUT NAME=I&gt;1&lt;/OUTPUT&gt; &lt;INPUT VALUE="Increment" TYPE=BUTTON ONCLICK="inc()"&gt;
&lt;/FORM&gt;</pre>
Expand Down Expand Up @@ -62100,33 +62106,16 @@ <h4 id=history-traversal><span class=secno>6.5.9 </span>History traversal</h4> <
state object. Otherwise, let <var title="">state</var> be
null.</li>

<li>

<p>Run the appropriate steps according to the conditions
described:</p>
<li><p>Set <code title=dom-history-state><a href=#dom-history-state>history.state</a></code> to <var title="">state</var>.</li>

<dl class=switch><dt>If the <a href=#current-document-readiness>current document readiness</a> is set to the
string "complete"</dt>
<li><p>Fire a <code title=event-popstate><a href=#event-popstate>popstate</a></code> event at
the <code><a href=#window>Window</a></code> object of the <code><a href=#document>Document</a></code>, using
the <code><a href=#popstateevent>PopStateEvent</a></code> interface, with the <code title=dom-PopStateEvent-state><a href=#dom-popstateevent-state>state</a></code> attribute set to the
value of <var title="">state</var>. This event must bubble but not
be cancelable and has no default action.</li>

<dd><p><a href=#queue-a-task>Queue a task</a> to fire a <code title=event-popstate><a href=#event-popstate>popstate</a></code> event at the
<code><a href=#window>Window</a></code> object of the <code><a href=#document>Document</a></code>, using
the <code><a href=#popstateevent>PopStateEvent</a></code> interface, with the <code title=dom-PopStateEvent-state><a href=#dom-popstateevent-state>state</a></code> attribute set to the
value of <var title="">state</var>. This event must bubble but
not be cancelable and has no default action.</dd>

<dt>Otherwise</dt>

<dd><p>Let the <code><a href=#document>Document</a></code>'s <a href=#pending-state-object>pending state
object</a> be <var title="">state</var>. (If there was already
a <a href=#pending-state-object>pending state object</a>, 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.</dd>

</dl></li>

<li><p>If <var title="">hash changed</var> is true, then
<a href=#queue-a-task>queue a task</a> to fire a <code title=event-hashchange><a href=#event-hashchange>hashchange</a></code> event at the
<li><p>If <var title="">hash changed</var> is true, then fire a
<code title=event-hashchange><a href=#event-hashchange>hashchange</a></code> event at the
<a href=#browsing-context>browsing context</a>'s <code><a href=#window>Window</a></code> object, using
the <code><a href=#hashchangeevent>HashChangeEvent</a></code> interface, with the <code title=dom-HashChangeEvent-oldURL><a href=#dom-hashchangeevent-oldurl>oldURL</a></code> attribute set to
<var title="">old URL</var> and the <code title=dom-HashChangeEvent-newURL><a href=#dom-hashchangeevent-newurl>newURL</a></code> attribute set to
Expand All @@ -62136,12 +62125,7 @@ <h4 id=history-traversal><span class=secno>6.5.9 </span>History traversal</h4> <
<li><p>The <a href=#current-entry>current entry</a> is now the <i>specified
entry</i>.</li>

</ol><p>The <dfn id=pending-state-object>pending state object</dfn> is used to keep track of what
state object to use in the inital <code title=event-popstate><a href=#event-popstate>popstate</a></code> event fired by the parser
once it <a href=#stop-parsing title="stop parsing">stops parsing</a>. The
<a href=#pending-state-object>pending state object</a> must be initially null.</p>

<p>The <a href=#task-source>task source</a> for the tasks mentioned above is the
</ol><p>The <a href=#task-source>task source</a> for the tasks mentioned above is the
<a href=#dom-manipulation-task-source>DOM manipulation task source</a>.</p>


Expand Down Expand Up @@ -86588,14 +86572,6 @@ <h4 id=the-end><span class=secno>13.2.6 </span>The end</h4>
attribute set to false. This event must not bubble, must not be
cancelable, and has no default action.</li>

<li><p>If the <code><a href=#document>Document</a></code> is in a <a href=#browsing-context>browsing
context</a>, then <a href=#queue-a-task>queue a task</a> to fire a <code title=event-popstate><a href=#event-popstate>popstate</a></code> event at the
<code><a href=#document>Document</a></code>'s <code><a href=#window>Window</a></code> object using the
<code><a href=#popstateevent>PopStateEvent</a></code> interface, with the <code title=dom-PopStateEvent-state><a href=#dom-popstateevent-state>state</a></code> attribute set to the
current value of the <a href=#pending-state-object>pending state object</a>. This event
must bubble but not be cancelable and has no default
action.</li>

<li><p>If the <code><a href=#document>Document</a></code> has any <a href=#pending-application-cache-download-process-tasks>pending
application cache download process tasks</a>, then <a href=#queue-a-task title="queue a task">queue</a> each such <a href=#concept-task title=concept-task>task</a> in the order they were added to
the list of <a href=#pending-application-cache-download-process-tasks>pending application cache download process
Expand Down
78 changes: 27 additions & 51 deletions index
Expand Up @@ -243,7 +243,7 @@

<header class=head id=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
<hgroup><h1 class=allcaps>HTML</h1>
<h2 class="no-num no-toc">Living Standard &mdash; Last Updated 24 March 2011</h2>
<h2 class="no-num no-toc">Living Standard &mdash; Last Updated 25 March 2011</h2>
</hgroup><p>You can take part in this work. <a href=http://www.whatwg.org/mailing-list>Join the working group's discussion list.</a></p>
<p><strong>Web designers!</strong> We have a <a href=http://blog.whatwg.org/faq/>FAQ</a>, a <a href=http://forums.whatwg.org/>forum</a>, and a <a href=http://www.whatwg.org/mailing-list#help>help mailing list</a> for you!</p>
<!--<p class="impl"><strong>Implementors!</strong> We have a <a href="http://www.whatwg.org/mailing-list#implementors">mailing list</a> for you too!</p>-->
Expand Down Expand Up @@ -60398,6 +60398,7 @@ x === this; // true</pre>

<pre class=idl>interface <dfn id=history-0>History</dfn> {
readonly attribute long <a href=#dom-history-length title=dom-history-length>length</a>;
readonly attribute any <a href=#dom-history-state title=dom-history-state>state</a>;
void <a href=#dom-history-go title=dom-history-go>go</a>(in optional long delta);
void <a href=#dom-history-back title=dom-history-back>back</a>();
void <a href=#dom-history-forward title=dom-history-forward>forward</a>();
Expand All @@ -60413,6 +60414,14 @@ x === this; // true</pre>

</dd>

<dt><var title="">window</var> . <code title=dom-history><a href=#dom-history>history</a></code> . <code title=dom-history-state><a href=#dom-history-state>state</a></code></dt>

<dd>

<p>Returns the current <a href=#state-object>state object</a>.</p>

</dd>

<dt><var title="">window</var> . <code title=dom-history><a href=#dom-history>history</a></code> . <code title=dom-history-go><a href=#dom-history-go>go</a></code>( [ <var title="">delta</var> ] )</dt>

<dd>
Expand Down Expand Up @@ -60495,6 +60504,11 @@ x === this; // true</pre>

<p>The actual entries are not accessible from script.</p>

<p>The <dfn id=dom-history-state title=dom-history-state><code>state</code></dfn>
attribute of the <code><a href=#history-0>History</a></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 id=dom-history-go 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
agent must act as if the <code title=dom-location-reload><a href=#dom-location-reload>location.reload()</a></code> method was
Expand Down Expand Up @@ -60663,16 +60677,8 @@ x === this; // true</pre>

<li>

<p>If the <a href=#current-document-readiness>current document readiness</a> is not yet set
to the string "complete", let the <code><a href=#document>Document</a></code>'s
<a href=#pending-state-object>pending state object</a> be another <a href=#structured-clone>structured
clone</a> of the specified <var title="">data</var>. (If there
was already a <a href=#pending-state-object>pending state object</a>, the previous one
is discarded.)</p>

<p class=note>This ensures that the <code title=event-popstate><a href=#event-popstate>popstate</a></code> event that will be fired
when the document finally loads will accurately reflect the
pushed or replaced state object.</p>
<p>Set <code title=dom-history-state><a href=#dom-history-state>history.state</a></code> to
another <a href=#structured-clone>structured clone</a> of the specified <var title="">data</var>.</p>

</li>

Expand Down Expand Up @@ -60778,7 +60784,7 @@ x === this; // true</pre>
document.forms.F.I.value = newI;
}
&lt;/SCRIPT&gt;
&lt;BODY ONPOPSTATE="recover(event.state)"&gt;
&lt;BODY ONPOPSTATE="set(event.state)"&gt;
&lt;FORM NAME=F&gt;
State: &lt;OUTPUT NAME=I&gt;1&lt;/OUTPUT&gt; &lt;INPUT VALUE="Increment" TYPE=BUTTON ONCLICK="inc()"&gt;
&lt;/FORM&gt;</pre>
Expand Down Expand Up @@ -62080,33 +62086,16 @@ State: &lt;OUTPUT NAME=I&gt;1&lt;/OUTPUT&gt; &lt;INPUT VALUE="Increment" TYPE=BU
state object. Otherwise, let <var title="">state</var> be
null.</li>

<li>

<p>Run the appropriate steps according to the conditions
described:</p>
<li><p>Set <code title=dom-history-state><a href=#dom-history-state>history.state</a></code> to <var title="">state</var>.</li>

<dl class=switch><dt>If the <a href=#current-document-readiness>current document readiness</a> is set to the
string "complete"</dt>
<li><p>Fire a <code title=event-popstate><a href=#event-popstate>popstate</a></code> event at
the <code><a href=#window>Window</a></code> object of the <code><a href=#document>Document</a></code>, using
the <code><a href=#popstateevent>PopStateEvent</a></code> interface, with the <code title=dom-PopStateEvent-state><a href=#dom-popstateevent-state>state</a></code> attribute set to the
value of <var title="">state</var>. This event must bubble but not
be cancelable and has no default action.</li>

<dd><p><a href=#queue-a-task>Queue a task</a> to fire a <code title=event-popstate><a href=#event-popstate>popstate</a></code> event at the
<code><a href=#window>Window</a></code> object of the <code><a href=#document>Document</a></code>, using
the <code><a href=#popstateevent>PopStateEvent</a></code> interface, with the <code title=dom-PopStateEvent-state><a href=#dom-popstateevent-state>state</a></code> attribute set to the
value of <var title="">state</var>. This event must bubble but
not be cancelable and has no default action.</dd>

<dt>Otherwise</dt>

<dd><p>Let the <code><a href=#document>Document</a></code>'s <a href=#pending-state-object>pending state
object</a> be <var title="">state</var>. (If there was already
a <a href=#pending-state-object>pending state object</a>, 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.</dd>

</dl></li>

<li><p>If <var title="">hash changed</var> is true, then
<a href=#queue-a-task>queue a task</a> to fire a <code title=event-hashchange><a href=#event-hashchange>hashchange</a></code> event at the
<li><p>If <var title="">hash changed</var> is true, then fire a
<code title=event-hashchange><a href=#event-hashchange>hashchange</a></code> event at the
<a href=#browsing-context>browsing context</a>'s <code><a href=#window>Window</a></code> object, using
the <code><a href=#hashchangeevent>HashChangeEvent</a></code> interface, with the <code title=dom-HashChangeEvent-oldURL><a href=#dom-hashchangeevent-oldurl>oldURL</a></code> attribute set to
<var title="">old URL</var> and the <code title=dom-HashChangeEvent-newURL><a href=#dom-hashchangeevent-newurl>newURL</a></code> attribute set to
Expand All @@ -62116,12 +62105,7 @@ State: &lt;OUTPUT NAME=I&gt;1&lt;/OUTPUT&gt; &lt;INPUT VALUE="Increment" TYPE=BU
<li><p>The <a href=#current-entry>current entry</a> is now the <i>specified
entry</i>.</li>

</ol><p>The <dfn id=pending-state-object>pending state object</dfn> is used to keep track of what
state object to use in the inital <code title=event-popstate><a href=#event-popstate>popstate</a></code> event fired by the parser
once it <a href=#stop-parsing title="stop parsing">stops parsing</a>. The
<a href=#pending-state-object>pending state object</a> must be initially null.</p>

<p>The <a href=#task-source>task source</a> for the tasks mentioned above is the
</ol><p>The <a href=#task-source>task source</a> for the tasks mentioned above is the
<a href=#dom-manipulation-task-source>DOM manipulation task source</a>.</p>


Expand Down Expand Up @@ -82524,14 +82508,6 @@ document.body.appendChild(text);
attribute set to false. This event must not bubble, must not be
cancelable, and has no default action.</li>

<li><p>If the <code><a href=#document>Document</a></code> is in a <a href=#browsing-context>browsing
context</a>, then <a href=#queue-a-task>queue a task</a> to fire a <code title=event-popstate><a href=#event-popstate>popstate</a></code> event at the
<code><a href=#document>Document</a></code>'s <code><a href=#window>Window</a></code> object using the
<code><a href=#popstateevent>PopStateEvent</a></code> interface, with the <code title=dom-PopStateEvent-state><a href=#dom-popstateevent-state>state</a></code> attribute set to the
current value of the <a href=#pending-state-object>pending state object</a>. This event
must bubble but not be cancelable and has no default
action.</li>

<li><p>If the <code><a href=#document>Document</a></code> has any <a href=#pending-application-cache-download-process-tasks>pending
application cache download process tasks</a>, then <a href=#queue-a-task title="queue a task">queue</a> each such <a href=#concept-task title=concept-task>task</a> in the order they were added to
the list of <a href=#pending-application-cache-download-process-tasks>pending application cache download process
Expand Down

0 comments on commit 4e57ced

Please sign in to comment.