Set URL in history.replaceState/pushState

When <base href> is present, history.replaceState and
history.pushState behave inconsistent with relative URLs.
http://code.google.com/p/chromium/issues/detail?id=274024

Contrary to what one expect, passing '' as the URL parameter to
replaceState/pushState does not associate the currently active
URL with the history entry, but a path relative to <base href>.

To fix the issue, explicitly associate the current active URL
with the history's state.
This commit is contained in:
Rob Wu 2013-08-16 12:04:42 +02:00
parent 5ca1c84564
commit c653bf3aff

View File

@ -65,7 +65,8 @@ var PDFHistory = {
// is opened in the web viewer.
this.reInitialized = true;
}
window.history.replaceState({ fingerprint: this.fingerprint }, '');
window.history.replaceState({ fingerprint: this.fingerprint }, '',
document.URL);
}
var self = this;
@ -270,9 +271,9 @@ var PDFHistory = {
}
}
if (overwrite || this.uid === 0) {
window.history.replaceState(this._stateObj(params), '');
window.history.replaceState(this._stateObj(params), '', document.URL);
} else {
window.history.pushState(this._stateObj(params), '');
window.history.pushState(this._stateObj(params), '', document.URL);
}
this.currentUid = this.uid++;
this.current = params;