用document.title=“xxx”动态修改title,在ios的微信下面不生效

单页应用里整个页面只会在第一次彻底刷新,后面只会局部刷新(通常不包括head及里面的title),因此没法在服务器端控制title,只能在页面刷新的时候经过js修改title。常规作法以下,惋惜在iOS微信浏览器无效。javascript

 

问题缘由:css

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

 

解决方案:ios

修改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的状态下处理的方法:app

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); } }
相关文章
相关标签/搜索