IOS中浏览器修改document.title不起作用
原因就是:浏览器首次加载页面初始化title后,就再也不监听 document.title的change事件,因此只使用document.title来修改,不会有效果。
解决办法:修改了title后,立即创建一个请求,加载一个空的iframe,由于加载后立即就移除,也不会对页面造成影响,但这样浏览器上的title便刷新了。
const setDocumentTitle = function(title) {
document.title = title;
if (/ip(hone|od|ad)/i.test(navigator.userAgent)) {
var i = document.createElement('iframe');
i.src = '/favicon.ico';
i.style.display = 'none';
i.onload = function() {
setTimeout(function(){
i.remove();
}, 9)
}
document.body.appendChild(i);
}
}
router.afterEach((to, from, next) => {
const { title } = to.meta;
if(title && document.title!=title) setDocumentTitle(title);
})
display:none这个设置使iframe脱离文本流,那么加载和删除这个iframe都不会改变文本流,也不会触发页面渲染,性能会好一些。