| ▲ | LegionMammal978 4 days ago | |||||||||||||
It's pretty weird, my impression is that the APIs are flexible enough to implement most sane behaviors, but websites keep managing to mess it all up. Perhaps it's just one of those things that no one bothers re-testing as the codebase changes. | ||||||||||||||
| ▲ | embedding-shape 4 days ago | parent | next [-] | |||||||||||||
In my experience, the problem is two-fold. First product managers/owners don't consider the URIs, so it ends up not being specified. They say "We should have a page when user clicks X, and then on that page, user can open up modal Y", but none of it is specified in terms of what happens with the URIs and history. Then a developer gets the task to create this, and they too don't push back on what exact URIs are being used, nor how the history is being treated. Either they don't have time, don't have the power to send back tasks to product, simply don't care or just don't think of it. They happily carry along creating whatever URIs make sense to them. No one is responsible for URLs, no one considers that part of UX and design, so no one ends up thinking about it, people implement things as they feel is right, without having a full overview over how things are supposed to fit together. Anyways, that's just based on my experience, I'm sure there are other holes in the process that also exacerbates the issue. | ||||||||||||||
| ||||||||||||||
| ▲ | moritzwarhier 4 days ago | parent | prev [-] | |||||||||||||
Nothing weird about it, you see people arguing right here whether a site should add a new history entry when a filter is set. Interacting with the URL from JS within the page load cycle is inherently complex. For what it's worth, I'd also argue that the right behavior here is to replace. But that of course also means that now the URL on the history stack for this particular view will always have the filter in it (as opposed to an initial visit without having touched anything). Of course the author's case is the good/special one where they already visited the site with a filter in the URL. But when you might be interested in using the view/page with multiple queries/filters/paramerers, it might also be unexpected: for example, developers not having a dedicated search results page and instead updating the query parameters of the current URL. Also, from the history APIs perspective, path and query parameters are interchangeable as long as the origin matches, but user expectations (and server behavior) might assign them different roles. Still, we're commenting on a site where the main view parameter (item ID, including submission pages) is a query parameter. So this distinction is pretty arbitrary. And the most extreme case of misusing pushState (instead if replace) are sites where each keystroke in some typeahead filter creates a new history entry. All of this doesn't even touch the basic requirement that is most important and addressed in the article: being able to refresh the page without losing state and being able to bookmark things. Manually implementing stuff like this on top of a basic routing functionality (which should use pushState) in an SPA is complex very quickly. | ||||||||||||||
| ||||||||||||||