next.js/packages/next/src/server/app-render/metadata-insertion/create-server-inserted-metadata.tsx
create-server-inserted-metadata.tsx21 lines634 B
/**
 * For chromium based browsers (Chrome, Edge, etc.) and Safari,
 * icons need to stay under <head> to be picked up by the browser.
 *
 */
const REINSERT_ICON_SCRIPT = `\
document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))`

export function createServerInsertedMetadata(nonce: string | undefined) {
  let inserted = false

  return async function getServerInsertedMetadata(): Promise<string> {
    if (inserted) {
      return ''
    }

    inserted = true
    return `<script ${nonce ? `nonce="${nonce}"` : ''}>${REINSERT_ICON_SCRIPT}</script>`
  }
}
Quest for Codev2.0.0
/
SIGN IN