| |
| ▲ | orphea 4 days ago | parent [-] | | I'm glad to see that prismjs site mentioned by the blog is doing the right thing - when it updates the URL, it replaces the current history item. | | |
| ▲ | embedding-shape 4 days ago | parent [-] | | Does that handle back button correctly? Nothing more annoying that sites/apps that overwrites the history incorrectly, so when you press the back button it goes to the entry before you entered the website/app, rather than back into what you were doing in the website/app. Both approaches (appending/rewriting) have their uses, the tricky part is using the right thing for the right action, fuck up either and the experience is abysmal. | | |
| ▲ | macNchz 4 days ago | parent | next [-] | | It’s definitely possible to make a really stellar experience, but that winds up being the exception. The URL and history state are sort of “invisible” elements of the user experience but require thoughtful care and attention to what the user expects/wants at each step, a level of attention which is already a rarity in web development even in the most visible parts of a page…so frequently the history/back button stuff just totally sucks. | | |
| ▲ | embedding-shape 4 days ago | parent [-] | | Yeah, in my experience you only get great stuff when both product and engineering has equal care for the final experience. If either parties lack care, you'll miss stuff, particularly things that are "invisible" as you say. |
| |
| ▲ | LegionMammal978 4 days ago | parent | prev [-] | | 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. | | |
| ▲ | nkrisc 4 days ago | parent | next [-] | | As a UX designer, this is a failure of the UX designers, IMO. If you're a UX designer for web, you should be aware of web technology and be thinking about these things. Even if you don't know enough to fully specify it, you should be able to enough such that you can have conversations with a developer to work together to fully spec it out. That said, I've also worked with some developers that didn't like intruding on their turf, so to speak. Though I've also worked with others that were more than happy to collaborate and very proactive about these sorts of things. Furthermore, as a UX designer this is the sort of topic that we're unlikely to be able to meaningfully discuss with PMs and other stakeholders as it's completely non-visual and often trying to bring this up with them and discuss it ends up feeling like pulling teeth and them wondering why we're even spending time on it. So usually it just ended up being a discussion between me and the developers with no PM oversight. | |
| ▲ | _heimdall 3 days ago | parent | prev [-] | | Web developers should make it a habit to ask/require URL structures be part of the spec. I've had people be surprised by the request because its something they don't usually consider, but I've never had anyone actually push back on it. |
| |
| ▲ | 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. | | |
| ▲ | hdjrudni 4 days ago | parent [-] | | > 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). I would have one state for when the user first entered the page, and then the first time they modify a filter, add a 2nd state. From thereon, keep updating/replacing that state. This way if the user clicks into the page, and modifies a dozen things they can 1. Refresh and keep all their filters, or share with a friend
2. Press back to basically clear all their filters (get back to the initial state of the page)
3. Only 1 more press of back to get back to where-ever they came from |
|
|
|
|
|