detach SSRd <head> contents

This commit is contained in:
Rich Harris
2017-12-13 20:24:58 -05:00
parent 22d3cb2b1e
commit bffffe0035
3 changed files with 17 additions and 7 deletions

View File

@@ -64,11 +64,12 @@ module.exports = function connect(opts) {
let data = { params: req.params, query: req.query }; let data = { params: req.params, query: req.query };
if (mod.default.preload) data = Object.assign(data, await mod.default.preload(data)); if (mod.default.preload) data = Object.assign(data, await mod.default.preload(data));
const { html, css } = mod.default.render(data); const { html, head, css } = mod.default.render(data);
const page = templates.render(200, { const page = templates.render(200, {
main, main,
html, html,
head: `<noscript id='sapper-head-start'></noscript>${head}<noscript id='sapper-head-end'></noscript>`,
styles: (css && css.code ? `<style>${css.code}</style>` : '') styles: (css && css.code ? `<style>${css.code}</style>` : '')
}); });

View File

@@ -1,4 +1,4 @@
const router = { const app = {
init(callback) { init(callback) {
window.addEventListener('click', event => { window.addEventListener('click', event => {
let a = event.target; let a = event.target;
@@ -19,6 +19,4 @@ const router = {
} }
}; };
window.router = router; export default app;
export default router;

View File

@@ -1,9 +1,10 @@
import router from 'sapper/runtime/router.js'; import app from 'sapper/runtime/app.js';
import { detachNode } from 'svelte/shared.js';
const target = document.querySelector('__selector__'); const target = document.querySelector('__selector__');
let component; let component;
router.init(url => { app.init(url => {
if (url.origin !== window.location.origin) return; if (url.origin !== window.location.origin) return;
let match; let match;
@@ -19,6 +20,16 @@ router.init(url => {
if (component) { if (component) {
component.destroy(); component.destroy();
} else { } else {
// remove SSR'd <head> contents
const start = document.querySelector('#sapper-head-start');
let end = document.querySelector('#sapper-head-end');
if (start && end) {
while (start.nextSibling !== end) detachNode(start.nextSibling);
detachNode(start);
detachNode(end);
}
target.innerHTML = ''; target.innerHTML = '';
} }