.replace(namedParam, function(match, optional){
return optional ? match : '([^\/]+)';
})
- .replace(splatParam, '(.*?)') + '(?:$|[?#])');
+ .replace(splatParam, '(.*?)') + '(?:\\?.*)?$');
var route = {};
}
};
- var currentPath = window.location.pathname,
+ var currentPath = window.location.pathname + window.location.search,
currentRoute = routes.recognize(currentPath);
currentRoute.run('load', currentPath);
if (window.history && window.history.pushState) {
- $(window).on('popstate', function() {
- var path = window.location.pathname;
+ // Set a non-null initial state, so that the e.originalEvent.state
+ // check below works correctly when going back to the initial page.
+ window.history.replaceState({}, document.title, window.location);
+
+ $(window).on('popstate', function(e) {
+ if (!e.originalEvent.state) return; // Is it a real popstate event or just a hash change?
+ var path = window.location.pathname + window.location.search;
if (path === currentPath) return;
currentRoute.run('unload');
currentPath = path;