reset_focus sets the sequential focus navigation starting point with location.replace('#id') (client.js:3792 at 2eed638), then undoes the side effects: the popstate it fires, the nulled history.state, and the scroll. It still leaks a hashchange to app listeners.
Giving the target tabindex="-1", calling focus({ preventScroll: true, focusVisible: false }) and removing the attribute sets the starting point in all three engines with none of those side effects. It was option 1 in #10856, passed over for the focus ring, which focusVisible now removes.
reset_focussets the sequential focus navigation starting point withlocation.replace('#id')(client.js:3792at 2eed638), then undoes the side effects: the popstate it fires, the nulledhistory.state, and the scroll. It still leaks ahashchangeto app listeners.Giving the target tabindex="-1", calling focus({ preventScroll: true, focusVisible: false }) and removing the attribute sets the starting point in all three engines with none of those side effects. It was option 1 in #10856, passed over for the focus ring, which
focusVisiblenow removes.