单页应用里整个页面只会在第一次完全刷新,后面只会局部刷新(一般不包括head及里面的title),所以无法在服务器端控制title,只能在页面刷新的时候通过js修改title。常规做法如下,可惜在iOS微信浏览器无效。
问题原因:
因为微信浏览器首次加载页面初始化title后,就再也不监听 document.title的change事件。
解决方案:
修改title之后,给页面加上一个内容为空的iframe,随后立即删除这个iframe,这时候会刷新title。但是如果简单的这样设置,一般是会有闪动的,所以可以设置
方法一:
完整代码:
- document.title = '设置标题HTTP';
- const iframe = document.createElement('iframe');
- iframe.style.cssText = 'display: none; width: 0; height: 0;';
- iframe.src = 'http://desk.fd.zol-img.com.cn/t_s960x600c5/g5/M00/05/0F/ChMkJ1erCriIJ_opAAY8rSwt72wAAUU6gMmHKwABjzF444.jpg';
- //iframe.src = require('./img/text_delete.png');
- const listener = () => {
- setTimeout(() => {
- iframe.removeEventListener('load', listener);
- setTimeout(() => {
- document.body.removeChild(iframe);
- }, 0);
- }, 0);
- };
- iframe.addEventListener('load', listener);
- 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); } }