1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00

Properly handle hash URL changes. (#996)

* Properly handle hash URL changes.

* Make sure we replace origin correctly.

* Get rid of RegExp for getUrl().
This commit is contained in:
Arunoda Susiripala 2017-02-05 14:28:44 +05:30 committed by Naoyuki Kanezawa
parent a8731d0651
commit 5b2854dce9

View file

@ -34,11 +34,18 @@ export default class Router extends EventEmitter {
}
async onPopState (e) {
// Older versions of safari and chrome tend to fire popstate event at the
// page load.
// We should not complete that event and the following check will fix it.
// Fixes:
if (!e.state) {
// We get state as undefined for two reasons.
// 1. With older safari (< 8) and older chrome (< 34)
// 2. When the URL changed with #
//
// In the both cases, we don't need to proceed and change the route.
// (as it's already changed)
// But we can simply replace the state with the new changes.
// Actually, for (1) we don't need to nothing. But it's hard to detect that event.
// So, doing the following for (1) does no harm.
const { pathname, query } = this
this.replace(format({ pathname, query }), getURL())
return
}
@ -276,7 +283,8 @@ export default class Router extends EventEmitter {
}
function getURL () {
return window.location.pathname + (window.location.search || '') + (window.location.hash || '')
const { href, origin } = window.location
return href.substring(origin.length)
}
function toRoute (path) {