diff --git a/README.md b/README.md index fcb9362..6d177e5 100644 --- a/README.md +++ b/README.md @@ -82,9 +82,12 @@ export async function prerender(data) { // Sets any additional elements you want injected into the `
`: // // + // elements: new Set([ { type: 'link', props: { rel: 'stylesheet', href: 'foo.css' } }, { type: 'meta', props: { property: 'og:title', content: 'Social media title' } }, + // Use `replace` with a CSS selector to remove existing elements before inserting: + { type: 'meta', props: { name: 'description', content: 'My cool description' }, replace: 'meta[name="description"]' }, ]), }, }; diff --git a/src/plugins/prerender-plugin.js b/src/plugins/prerender-plugin.js index 4c8bc22..70f727d 100644 --- a/src/plugins/prerender-plugin.js +++ b/src/plugins/prerender-plugin.js @@ -481,6 +481,15 @@ export function prerenderPlugin({ prerenderScript, renderTarget, additionalPrere } if (head.elements) { + // Remove existing elements that should be replaced + for (const element of head.elements) { + if (element.replace) { + for (const existing of htmlHead.querySelectorAll(element.replace)) { + existing.remove(); + } + } + } + // Inject HTML links at the end of for any stylesheets injected during rendering of the page: htmlHead.insertAdjacentHTML( 'beforeend', diff --git a/src/plugins/types.d.ts b/src/plugins/types.d.ts index d13ad3c..e14b9d4 100644 --- a/src/plugins/types.d.ts +++ b/src/plugins/types.d.ts @@ -2,6 +2,8 @@ export interface HeadElement { type: string; props: Record