diff --git a/.changeset/olive-vans-talk.md b/.changeset/olive-vans-talk.md new file mode 100644 index 000000000000..771cab6881db --- /dev/null +++ b/.changeset/olive-vans-talk.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Fix Safari scroll bug on ssr:false page reload diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 9a4870b8b524..8bfcd1fd087a 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -299,7 +299,7 @@ export function create_client({ target, session, base, trailing_slash }) { getSelection()?.removeAllRanges(); root.tabIndex = -1; - root.focus(); + root.focus({ preventScroll: true }); // restore `tabindex` as to prevent `root` from stealing input from elements if (tabindex !== null) { diff --git a/packages/kit/test/apps/basics/src/routes/no-ssr/margin.svelte b/packages/kit/test/apps/basics/src/routes/no-ssr/margin.svelte new file mode 100644 index 000000000000..982a04c9defb --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/no-ssr/margin.svelte @@ -0,0 +1,14 @@ +
+ ^this is not the top of the screen +
+
+ + diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index f46d645200fe..3e56c2de803c 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -304,6 +304,13 @@ test.describe('Scrolling', () => { await back(); expect(await page.evaluate(() => window.scrollY)).toBe(1000); }); + + test('scroll position is top of page on ssr:false reload', async ({ page }) => { + await page.goto('/no-ssr/margin'); + expect(await page.evaluate(() => window.scrollY)).toBe(0); + await page.reload(); + expect(await page.evaluate(() => window.scrollY)).toBe(0); + }); }); test.describe.parallel('Imports', () => {