Keep browser back navigation anchored after hash jumps#96
Open
xyjk0511 wants to merge 1 commit into
Open
Conversation
Constraint: Safari can lose the pre-anchor scroll position after intra-page reference jumps and async page layout.\nConfidence: medium\nScope-risk: narrow\nDirective: Keep this fix limited to history/hash scroll restoration; do not change book content or generated pages by hand.\nTested: Extracted injected JavaScript from header.html and ran node --check successfully.\nNot-tested: Manual Safari reproduction; Safari is not available in this Windows environment.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR draft: Fix Safari back button scroll restoration after reference jumps
Closes #72
Summary
This adds a small, dependency-free scroll restoration helper to
header.html.When a reader clicks an in-page reference link, the script stores the current scroll position for the current page. If the browser later navigates back via history or restores the page from the back-forward cache, it restores that saved position after layout has had a chance to settle.
Why
Safari can lose the expected scroll position after jumping from a deep section to an appendix/reference anchor and then pressing Back. The page also has delayed layout work from rendered math/content, so a single immediate
scrollTois not always enough. The helper retries briefly and then stops.Scope
Verification
header.htmland rannode --checksuccessfully.header.html.Not tested