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


單頁應用里整個頁面只會在第一次完全刷新,后面只會局部刷新(一般不包括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); } }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM