如何在Next.js 13或14中动态更改Favicon的暗模式和亮模式?

bvuwiixz  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(214)

我正在使用App Router开发一个Next.js 14应用程序,我想根据用户的配色方案首选项动态更改favicon(暗模式或亮模式)。目前,我有一个黑色的favicon和一个白色-我如何设置我的Next.js 14应用程序在激活黑暗模式时自动将favicon切换到相应的版本,并在亮模式还是默认模式?
在以前的版本中,这可以使用<Head/>组件来实现。然而,在Next.js版本14中,引入了新的Metadata接口来描述所有的元数据字段。但是,现在我不知道如何实现基于颜色模式的favicon更改。

我的期望:

  • 在我的Next.js版本14应用程序中,我想根据颜色模式动态更改favicon
  • 我希望我可以根据用户的配色方案偏好(深色或浅色模式),以编程方式/自动地在黑色和白色favicon版本之间切换。
ua4mk5z4

ua4mk5z41#

由于没有直接的答案,当我发布的问题,我在互联网上搜索,并没有找到任何解决方案。所以,我已经阅读了官方文档的图标,我找到了解决方案自己。虽然没有直接的解决方案,在文档中,但得到了提示,它解决了我的问题。
我分享代码,因为如果有人遇到同样的问题,在未来它会帮助他们,

// app/layout.tsx
export const metadata: Metadata = {
  title: 'Website Title',
  description: 'Website description',
  icons: {
    icon: [
      {
        media: '(prefers-color-scheme: light)',
        url: '/images/icon-light.png',
        href: '/images/icon-light.png',
      },
      {
        media: '(prefers-color-scheme: dark)',
        url: '/images/icon.png',
        href: '/images/icon-dark.png',
      },
    ],
  },
};

字符串
我必须删除app/icon.png或任何默认Mapfavicon的文件,以便激活Metadata界面的icon。而且,我的favicon or icon images存储在public/images/icon-light.pngpublic/images/icon-dark.png中。而且,现在它基于颜色模式动态工作。

快速流程:

  • app/目录中删除任何faviconicon图像。
  • favicon or icon images存储到public/images/目录。
  • app/Layout.tsxmetadata.icons.icon中,将urlhref路径添加到存储的images相对路径。

相关问题