Discourse가 JavaScript를 통해 URL 단편(fragments)을 처리하고 해당 위치로 스크롤하므로, 히스토리가 명시적으로 push되어야 한다고 추측합니다.
@codinghorror은 이 문제에 대해 여기에서 강하고도 최종적인 의견을 표명했습니다. 표준 웹 브라우저 동작에 대한 변경 사항에 대해 이렇게 강한 의견이 나온다는 것은 놀랍습니다. 공평하게 말하자면, 저는 아직 Discourse를 고강도 토픽 탐색에 사용하지 않아서 그의 주장이 자명하다는 점을 충분히 이해하지 못하고 있습니다.
저는 Discourse를 문서화 목적으로 부분적으로 사용하고 있는데, 이 동작은 매우 방해가 심해서 링크를 클릭했다가 페이지에서 제 위치를 잃을까 봐 클릭조차 두려울 정도입니다.
당신이 지적해 주지 않았다면 이 부분이 나를 불편하게 하고 있다는 사실조차 몰랐을 거예요. Discourse에서 링크를 클릭한 뒤 원래 있던 페이지로 돌아가려 하면, 의도치 않게 이전 페이지로 이동하는 경우가 많았거든요. 정말 짜증나는 일이었어요. 저는 거의 모든 Discourse 관련 활동을 iOS 앱으로 하니까, 그 앱의 문제와 제 실수가 겹친 결과라고만 여겼습니다.
테마 컴포넌트를 통해 워크어라운드(링크 내비게이션에 대한 Discourse의 관점에서 사이트를 커스터마이즈하는 적절하다고 할 수 있는 방법)를 구현했습니다. 이는 DiscoTOC에서 사용되는 패턴을 따르며, 포스트에 마커를 추가하여 동작을 트리거합니다. 해당 코드는 여기에서 확인하실 수 있습니다.
DiscoTOC가 URL 조각(fragment)과 브라우저 히스토리를 사용하도록 수정하는 것은 좋은 아이디어라고 생각합니다. 이는 내비게이션 방식을 변경해야 하므로 사소한 변경이 아닙니다. DiscoTOC는 링크의 href 대신 데이터 속성(data attributes)을 통해 타겟을 전달합니다. 또한 브라우저 URL(window.location)에 새로운 페이지 위치를 반영하려는 시도는 없습니다.
위에서 제가 사용한 패턴이 DiscoTOC에도 적용될 수 있다고 생각하지만, 현재 DiscoTOC의 접근 방식을 고려할 때 그 컴포넌트에 더 광범위한 영향을 미칠 것입니다.