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都不会改变文本流,也不会触发页面渲染,性能会好一些。

posted @ 2020-05-06 16:31  千年轮回  阅读(1983)  评论(0编辑  收藏  举报