diff options
author | 2022-05-03 22:30:46 +0000 | |
---|---|---|
committer | 2022-05-03 22:30:46 +0000 | |
commit | 9ad8aefdd79a039062f5a0510fabb2b5e535603f (patch) | |
tree | e18d78471bca2f59a656835b959c7572a21809a0 /packages/integrations/turbolinks/client.js | |
parent | 204ff2c2238c7eac3ce646efdd436e515ac3f36d (diff) | |
download | astro-9ad8aefdd79a039062f5a0510fabb2b5e535603f.tar.gz astro-9ad8aefdd79a039062f5a0510fabb2b5e535603f.tar.zst astro-9ad8aefdd79a039062f5a0510fabb2b5e535603f.zip |
Turbolinks: clean up injected scripts and styles on page navigation (#3283)
* client hydration scripts should be removed before navigation
* chore: adding a changeset
* also cleanup injected styles on page navigation
Diffstat (limited to 'packages/integrations/turbolinks/client.js')
-rw-r--r-- | packages/integrations/turbolinks/client.js | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/packages/integrations/turbolinks/client.js b/packages/integrations/turbolinks/client.js index 6dde8c193..2305f3cf4 100644 --- a/packages/integrations/turbolinks/client.js +++ b/packages/integrations/turbolinks/client.js @@ -1,2 +1,18 @@ import Turbolinks from 'turbolinks'; export { Turbolinks }; + +// Before every page navigation, remove any previously added component hydration scripts +document.addEventListener('turbolinks:before-render', function () { + const scripts = document.querySelectorAll('script[data-astro-component-hydration]'); + for (const script of scripts) { + script.remove(); + } +}); + +// After every page navigation, move the bundled styles into the body +document.addEventListener('turbolinks:render', function () { + const styles = document.querySelectorAll('link[href^="/assets/asset"][href$=".css"]'); + for (const style of styles) { + document.body.append(style); + } +}); |