问题简介

前端入门没多久,可能连入门也不算,最近网上流行各自书籍改名,什么《前端开发,从入门到放弃》,《Android开发,从入门到改行》之类的,程序员真是个爱自嘲的群体,但我们一定是积极而向上的。

说到web前端,浏览器差异是不可回避的问题,这次的问题(知乎上的讨论)如下:

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

document.title = "the title you want to set";

解决方法

  var $body = $('body');
document.title = 'the title you want to set';
var $iframe = $("<iframe src='/favicon.ico'></iframe>");
$iframe.on('load',function() {
setTimeout(function() {
$iframe.off('load').remove();
}, 0);
}).appendTo($body);

原理比较简单,之前是因为微信浏览器首次加载页面初始化title后,就再也不监听 document.title的change事件。而这里修改title之后,给页面加上一个内容为空的iframe,随后立即删除这个iframe,这时候会刷新title。

该方法不是原创,出处很多,上面就引用知乎的链接算了。

问题要是单纯这样,我就不会半夜写这篇博客了,经过测试可得,在iframe加载和删除的时候,iOS页面会有几毫秒的闪动(有灰色的框),Android直接有灰色的框出现在页面不消失。

一开始并没有发现问题出在这里,后来通过git版本回退比较,才定位到问题。既然是因为这个iframe显示和隐藏给页面显示造成了影响,那一开始加载iframe的时候,就将该iframe的样式设置为:

display: none;

改进的代码如下:

  var $body = $('body');
document.title = 'the title you want to set';
var $iframe = $("<iframe style='display:none;' src='/favicon.ico'></iframe>");
$iframe.on('load',function() {
setTimeout(function() {
$iframe.off('load').remove();
}, 0);
}).appendTo($body);

这样就解决了这个问题,同时因为display:none这个设置,iframe是脱离文本流的,那么加载和删除这个iframe都不会改变文本流,也不会触发页面渲染,性能会好一些。

最后

我相信前面还有无数的坑,但是一路过来积累的分析问题,解决问题的方法会使我更加自信。年轻人最重要就是脚踏实地,厚积薄发,加油。

最新文章

  1. 撸一段 SQL ? 还是撸一段代码?
  2. mongodb 查询的用法
  3. Java8初体验(二)Stream语法详解
  4. [备忘][转]rsync使用时的常见问题
  5. css3中的zoom元素属性值测试
  6. 基础知识系列☞Abstract和Virtual→及相关知识
  7. mov视频转gif
  8. DrawTool多重笔之前奏 =&gt; 通过InkAnalyzer实现图形识别
  9. select多个字段赋值给多个变量
  10. android端从服务器抓取的几种常见的数据的处理方式
  11. [2013山东ACM]省赛 The number of steps (可能DP,数学期望)
  12. [M]带属性块参照的转换
  13. oracle_角色
  14. Selenium切换窗口,警告框处理,调用JavaScript代码
  15. Django中的FBV与CBV
  16. python日志模块的使用
  17. Qt画笔实现波形区域图
  18. 修改之前某次commit日志和内容
  19. 2018.09.15模拟总结(T1,T3)
  20. Alpha发布用户使用报告【欢迎来怼】

热门文章

  1. 用户、角色、权限三者多对多用hibernate的一对多注解配置
  2. Ubuntu 64位下搭建ADT的种种问题
  3. (转)jQuery插件 -- Form表单插件jquery.form.js
  4. JS截取字符串常用方法详细整理
  5. META元素使用的简单学习
  6. SSH整合!!!!不会的赶紧来
  7. linux 安装一些命令
  8. 第二章 搭建Android开发环境--读书笔记
  9. IOS设备 UIDevice 获取操作系统 版本 电量 临近手机触发消息检测 (真机亲测可用)
  10. Linux chroot 并使用之前系统设备节点