Vue页面在苹果设备中微信(X5)浏览器title不改变的解决方法

在使用vue写移动端页面时,发现iPhone手机中的X5内核浏览器不会改变title,原因是对于SPA这类单页面应用,路由的变化并不会触发页面更新document.title = to.meta.title,所以需要我们自己创建一个隐藏的iframe来实现触发。

以下是解决方案的实现代码:
main.js文件

router.beforeEach((to, from, next) => {
    let title = to.meta.title
    if(title) {
        document.title = title
        // 下面是关键的地方,匹配苹果设备
        if(/ip(hone|od|ad)/i.test(navigator.userAgent)) {
            let i = document.createElement('iframe')
            i.src = "//m.baidu.com/favicon.ico" // src要设置成一个实际存在的图片,最好是比较小的,如果不存在,在使用this.$router.go(-1)这种跳转时,会出现错误
            i.style.display = "none"
            i.onload = () => {
                setTimeout(() => {
                    document.body.removeChild(i)
                },0)
            }
        }
    }
})

网上有个npm包可以实现vue-wechat-title,它用的是同样的方法,封装成vue指令。
使用方法:

npm i vue-wechat-title -S
---OR---
yarn add vue-wechat-title

main.js文件

Vue.use(require('vue-wechat-title'))

App.vue

<router-view v-wechat-title="$route.meta.title" img-set="/static/logo.png">router-view>

注意img-set要设置一个实际存在的图片,如果不写img-set,默认会找根目录下的favicon.ico

你可能感兴趣的:(vue,vue-router)