Quando includo un collegamento a una sezione di una pagina - quel collegamento, quando cliccato, non modifica la cronologia del browser. Tornare indietro porta a uscire dalla pagina, invece di tornare alla posizione della pagina in cui è definito il collegamento.
Modifica: Beh, su questo Discourse non riesco a creare un elemento con un ID, quindi non posso dimostrarlo qui. Il codice sorgente qui è ciò che vorrei fare - ma serve solo a illustrare il concetto e non incide sul nocciolo del mio problema:
<div id="link-target"></div>
*Questa sezione è collegata dall'alto. Non c'è nulla da vedere qui.*
Questo è in qualche modo previsto. Se clicchi su un link a un altro post nello stesso argomento, non viene nemmeno aggiunto allo stack della cronologia, ed è un link completo senza frammenti, quindi non inseriamo mai i link interni all’argomento nella cronologia.
Trovo questo comportamento estremamente inaspettato
Ecco una pagina di esempio senza JavaScript. Su Chromium, cliccando quel link si viene portati in fondo alla pagina. Tornando indietro, si ritorna al punto da cui si era partiti. Questo è il comportamento atteso che si osserva su qualsiasi altro sito web che non manipola questo storico.
Immagino che Discourse gestisca i frammenti URL tramite JavaScript facendo scorrere la pagina fino alla posizione indicata, e quindi la cronologia dovrebbe essere esplicitamente aggiunta.
@codinghorror esprime un’opinione forte e definitiva al riguardo qui. È sorprendente vedere un’opinione così netta riguardo a un cambiamento nel comportamento standard dei browser web. Per onestà, non ho ancora usato Discourse per una navigazione intensiva tra gli argomenti, quindi non posso apprezzare l’evidenza del suo ragionamento.
Sto utilizzando Discourse anche per la documentazione e questo comportamento è estremamente disturbante, al punto da aver paura di cliccare un link e perdere il mio posto nella pagina.
Se sei tentato di cliccare su uno dei link dell’indice e poi tornare al punto di partenza tramite la cronologia del browser, non puoi.
Perché fornire un indice in primo luogo?
Per quei siti che vorrebbero supportare la navigazione standard del browser, avete qualche suggerimento?
Sto esaminando la possibilità di applicare una patch al comportamento di scorrimento verso l’elemento, che sospetto sia alla base di questo problema, ma parto praticamente senza alcuna conoscenza del codice Ci arriverò prima o poi, ma se qualcuno ha dei consigli, apprezzo molto il aiuto!
A seconda del contesto in cui utilizzerai gli anchor, forse questo plugin indice dei contenuti potrebbe essere utile (e a mio avviso si adatterebbe bene alla pagina dei Termini di Servizio e alle FAQ)?
Esempio qui.
Non avevo mai realizzato che questo mi desse fastidio finché non me l’hai fatto notare. Spesso ho provato a tornare alla pagina dove avevo cliccato su un link in Discourse, ma finivo invece su una pagina precedente. Molto irritante. Ho sempre dato la colpa a una combinazione dell’app iOS, dato che la uso per quasi tutto ciò che riguarda Discourse, e a un errore mio.
Questo componente TOC è davvero ben realizzato e lo stiamo utilizzando in ogni pagina della documentazione: siamo molto grati per il lavoro svolto!
Il problema della navigazione rimane tuttavia. Cliccando un link nel TOC non viene modificata la cronologia del browser e quindi, tornando indietro, si esce dalla pagina.
È certamente così. Sarebbe bello risolvere questo problema, @Johani, ma ho la sensazione che sia molto complicato. Forse dovremmo usare pushState quando si clicca su un link dell’indice dei contenuti.
Ho implementato una soluzione alternativa (che si potrebbe considerare un approccio corretto per personalizzare un sito, vista la prospettiva di Discourse sulla navigazione dei link) tramite un componente del tema. Questo segue il pattern utilizzato da DiscoTOC, dove viene aggiunto un marcatore a un post per attivare il comportamento. Il codice applicabile è qui.
Penso che modificare DiscoTOC per utilizzare gli frammenti di URL e la cronologia del browser sia una buona idea. Questo richiede di cambiare l’approccio del componente alla navigazione, il che non è una modifica minore. DiscoTOC utilizza attributi dati per passare i target invece degli href dei link. Non c’è alcun tentativo di riflettere la nuova posizione della pagina nell’URL del browser (window.location).
Penso che il pattern che sto usando sopra potrebbe funzionare per DiscoTOC, ma ciò avrebbe implicazioni più ampie per quel componente, dato il suo approccio attuale.
Penso che in questo caso si utilizzi pushState. L’obiettivo è abilitare il ritorno alla posizione precedente, il che richiede una push nella cronologia poiché l’evento viene prevenuto.