Skip to content

Commit

Permalink
Properly handle hash URL changes. (#996)
Browse files Browse the repository at this point in the history
* Properly handle hash URL changes.

* Make sure we replace origin correctly.

* Get rid of RegExp for getUrl().
  • Loading branch information
arunoda authored and nkzawa committed Feb 5, 2017
1 parent a8731d0 commit 5b2854d
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions lib/router/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 5b2854d

Please sign in to comment.