page.js icon indicating copy to clipboard operation
page.js copied to clipboard

hash change = 404

Open dm-de opened this issue 4 years ago • 3 comments

hashbang mode is broken it do not accept valid changes and return '*' route

output context object:

​canonicalPath: "/#!/user/100" ​hash: "" ​page: Object { current: "//user/100", len: 2, _decodeURLComponents: true, … } ​params: Object { 0: "//user/100", path: "/#!/user/100", query: "" } ​path: "//user/100" ​pathname: "/#!/user/100" ​querystring: "" ​routePath: "(.*)" ​state: Object { path: "/#!/user/100" } ​title: "app" ​: Object { pushState: pushState(), save: save(), … }

As you can see - here is double slash at path - so it can never be correct after hash change - and only '*' ist valid

I was able to fix this: @ function Context(path, state, pageInstance)

if (hashbang) this.path = this.path.replace('#!', '') || '/'; change to: if (hashbang) this.path = this.path.replace('/#!', '') || '/';

But i do not know if this has other sideeffects

dm-de avatar May 01 '20 16:05 dm-de

I have come across the same issue.

mset avatar May 29 '20 18:05 mset

😞 🐼

mattfysh avatar Jan 14 '21 01:01 mattfysh

Do it:

page('/', () => {
	page.redirect('/page/1')
})
page('/notfound', console.log)
page('/page/:number', console.log)
page('*', ctx => {
	if (/^(\/\/)/.test(ctx.path)) {
		page.redirect(ctx.path.slice(1, ctx.path.length))
	} else {
		page.show('/notfound')
	}
})
page.start({hashbang: true})

That workaround avoid the problem! If you try set the URL via external link or using navigator address bar, will work!!

lagden avatar Feb 14 '21 02:02 lagden