Nuxt3动态设置Favicon 网站小图标

60次阅读
没有评论

我们知道,Nuxt打包后会有public目录来存放静态文件,可以直接在这里传一个favicon.ico文件,然后访问项目地址/favicon.ico就可以看到这个图标了,但是有时候就是不想传一个固定的,就是想动态的从后台设置网站图标,怎么办

最初的实现

一开始,我是用Nuxt的useHead来把图标插进Html里面

Nuxt3动态设置Favicon 网站小图标
Nuxt3动态设置Favicon 网站小图标

这确实可以实现部分浏览器的图标显示

后来发现在safari浏览器里面标签页上面的显示的还是public下面我没删掉的默认的Nuxt图标,并且一些网上获取网站Favicon图标的接口,获取的也不准确,抓到的也是默认的/public目录下面的favicon.ico

例如这种网站

Nuxt3动态设置Favicon 网站小图标

我没有仔细研究,我认为他们这些接口应该是直接访问目标站/favicon.ico,来确定有没有favicon图标的,没有就显示他们默认的图标

所以我就想怎么实现监听 /favicon.ico,然后跳转到我后台设置的正确图标地址

最后的实现

之后在Nuxt文档里面找到了服务器中间件,它将在任何其他服务器路由之前在每个请求上运行

Nuxt3动态设置Favicon 网站小图标

之后我在server目录下创建了一个middleware文件夹,来放中间件,并创建了下面这样的中间件

Nuxt3动态设置Favicon 网站小图标

先前我试过用Nuxt根目录的middleware来实现,但是这个地方的中间件监听不到,之后就选择了这个server端的middleware

事实证明,它确实可以完成监听/favicon.ico这个路径,然后跳转到我们需要的地址,需要注意的是,这个阶段好像拿不到Nuxt实例 (目前我认为是这样的),不过运行时配置可以拿到,我就用里面我设置的接口baseURL再拼接一下后端的公共设置接口得到正确的favicon图标地址,再使用sendRedirect方法跳转过去,就实现了

需要注意的是,如果这里监听的是静态文件地址,请先把/public目录下对应的文件删除,它才可以监听到

正文完
 2
评论(没有评论)
验证码