lihanying

单页应用里整个页面只会在第一次完全刷新,后面只会局部刷新(一般不包括head及里面的title),所以无法在服务器端控制title,只能在页面刷新的时候通过js修改title。常规做法如下,可惜在iOS微信浏览器无效。

 

问题原因:

因为微信浏览器首次加载页面初始化title后,就再也不监听 document.title的change事件。

 

解决方案:

修改title之后,给页面加上一个内容为空的iframe,随后立即删除这个iframe,这时候会刷新title。但是如果简单的这样设置,一般是会有闪动的,所以可以设置

方法一:

完整代码:

  1. document.title = \'设置标题HTTP\';  
  2.         const iframe = document.createElement(\'iframe\');  
  3.         iframe.style.cssText = \'display: none; width: 0; height: 0;\';  
  4.         iframe.src = \'http://desk.fd.zol-img.com.cn/t_s960x600c5/g5/M00/05/0F/ChMkJ1erCriIJ_opAAY8rSwt72wAAUU6gMmHKwABjzF444.jpg\';  
  5.         //iframe.src = require(\'./img/text_delete.png\');  
  6.   
  7.         const listener = () => {  
  8.             setTimeout(() => {  
  9.                 iframe.removeEventListener(\'load\', listener);  
  10.                 setTimeout(() => {  
  11.                     document.body.removeChild(iframe);  
  12.                 }, 0);  
  13.             }, 0);  
  14.         };  
  15.         iframe.addEventListener(\'load\', listener);  
  16.         document.body.appendChild(iframe); 

方法二:

封装了一个只在IOS的状态下处理的方法:

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);
        }
    }

分类:

技术点:

相关文章:

  • 2019-06-11
  • 2021-12-18
  • 2021-12-18
  • 2021-11-11
  • 2021-11-11
  • 2021-05-31
  • 2021-09-26
  • 2021-12-18
猜你喜欢
  • 2021-12-18
  • 2021-12-18
  • 2021-12-18
  • 2021-12-18
  • 2021-12-18
  • 2021-12-18
  • 2021-08-18
相关资源
相似解决方案