最近用Vue2.0 SPA作了个微信应用,遇到了一个比较尴尬的问题。用document.title设置title,在返回时不会再从新设置title。浏览器
因为iOS的微信浏览器使用原生的title,在路由返回后不能及时捕获document.title的修改。微信
有一种hack的解决方案:在document里append一个空的iframe作伪请求,在修改完标题后进行remove。上代码。app
封装设置title的方法ui
const titleUtil = {}; titleUtil.setTitle = (title) => { document.title = title; let ua = navigator.userAgent; if (/\bMicroMessenger\/([\d\.]+)/.test(ua) && /ip(hone|od|ad)/i.test(ua)) { var i = document.createElement('iframe'); i.src = '/favicon.ico'; i.style.display = 'none'; i.onload = () => { setTimeout(() => { i.remove(); }, 9); }; document.body.appendChild(i); } }; export default titleUtil;
动态引入组件并设置meta,统一管理code
{ path: '/city_select', name: 'city.select', component: (resolve) => { require(['../components/page/fund/city.select'], resolve); } , meta: { title: '切换城市' } }
在路由钩子afterEach中设置titlecomponent
router.afterEach((route) => { titleUtil.setTitle(route.matched[0].meta.title || '首页'); });
搞定收工。router
若是有更好的方式但愿各位不吝赐教。ip