问题简介

前端入门没多久,可能连入门也不算,最近网上流行各自书籍改名,什么《前端开发,从入门到放弃》,《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都不会改变文本流,也不会触发页面渲染,性能会好一些。

最后

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

转载于:https://www.cnblogs.com/garfieldzhong/p/5816239.html

改进:js修改iOS微信浏览器的title相关推荐

  1. ios微信浏览器动态修改title

    平时使用JS修改title,直接document.title=新标题就好了 这样在安卓的微信浏览器是正常运行,可在IOS中这样的确不起作用. 微信浏览器的title在页面加载完成后就确定了,因此如果光 ...

  2. vue在微信里面的兼容问题_Vue在 iOS 微信浏览器下不能播放

    问题的本质 以上定位到问题大概花了我半小时时间,但是我并没有找到问题的根本原因,于是我翻阅了 Vue.js 2.5 的 release log,由于很长就不列了.Vue.js 每次升级主要分成 2 大 ...

  3. 【前端】IOS微信浏览器点击右上角遮罩实现

    前言 现在有一个需求,通过公众号或者链接,下载app应用,大家都知道,安卓和ios下载对应的版本都不一样.并且,ios 微信浏览器不支持应用下载,需要实现一个遮罩功能,提示用户通过浏览器下载,效果如下 ...

  4. IOS微信浏览器返回事件popstate监听

    问题描述: 通过监听popstate事件,来判断是否点击返回按钮,比如从A页面跳转到B页面(监听popstate),然后再跳转到C页面,点击返回的按钮,测试成功,包括安卓版,但是问题来了,IOS版的微 ...

  5. popstate android4.3,IOS微信浏览器返回事件popstate监听 会立即执行一次

    页面跳转从a->b->b1->c,然后从c返回到b再到a.(监听popstate) IOS版的微信,是会立即触法popstate事件,导致直接从C页面跳转到A页面 解决办法::: v ...

  6. 苹果微信html音乐播放,HTML5教程 在iOS微信浏览器中如何自动播放HTML5 audio

    本篇教程探讨了HTML5教程 在iOS微信浏览器中如何自动播放HTML5 audio,希望阅读本篇文章以后大家有所收获,帮助大家HTML5+CSS3从入门到精通 . < html> Aut ...

  7. 解决ios微信浏览器时间不兼容的问题

    解决ios微信浏览器时间格式不兼容的问题 由于ios在微信浏览器中无法识别"YYYY-MM-DD HH:MM:SS"格式的数据,所以在ios中页面将时间格式转换为"YYY ...

  8. JS动态更新微信浏览器中的title

    问题: 最近在做一个微信中分享的宣传页,分不同的场景,切换不同的场景时需要设置不同的title,实现的方案很简单,当用户切换场景的时候,修改document对象的title属性,可是在实际测试中,io ...

  9. JS如何区分微信浏览器、QQ浏览器和QQ内置浏览器,解决 ios 无法判断是否为qq浏览器环境的问题。

    原理 通过不同移动端的ua弹窗 获取user-agent 参数包含的信息,进行判断浏览器类型 在Android上 QQ内置环境的ua中有关键字 MQQBrowser, 并且后面包含一个[空白符+QQ] ...

  10. [Debug]IOS微信浏览器不支持form表单的target=_blank

    测试代码如下 1 <?php 2 echo '<meta name="viewport" content="width=device-width,minimu ...

最新文章

  1. 农历法定日历_木瓜日历安卓版下载-木瓜日历V1.5下载
  2. NYOJ 5287 异 形 卵
  3. vc实现透明位图,透明背景
  4. python建立数据库表格
  5. C#相关基础知识点总结+基础代码
  6. php做一个计算日期之间天数,PHP计算任意两个日期之间的天数
  7. 使用机器学习预测天气_如何使用机器学习预测着陆
  8. 简要概述html5的设计宗旨,HTML5程序设计(第2版) 第一章:HTML5概述.doc
  9. 在windows下python,pip,numpy,scipy,matplotlib的安装
  10. oracle数据库导出数据6,Oracle数据库导入导出方法汇总
  11. 用jquery动态添加form表单
  12. Mac Os的java开发环境以及MySql环境配置
  13. java根据xsd验证json文件_JSON解析器之json schema校验及代码实现
  14. public 函数_C++:11友元函数、友元类
  15. ubuntu16.04安装搜狗拼音输入法
  16. unity webgl踩坑指南
  17. Linux下C语言开发
  18. 基于IBM Tivoli TSM系统构建某局备份系统实施方案
  19. 人工智能革命:从ANI到AGI的道路
  20. dnf剑魂buff等级上限_DNF加百利商店什么装备值得买?除了远古遗愿这些装备也不容错过...

热门文章

  1. NHibernate ModelBinder for mvc3
  2. Codeforces Beta Round #61 (Div. 2)
  3. SQL Server索引的执行计划
  4. CreateThread _beginThread _begintheadex AfxBeginThead思考
  5. 堆排序python代码实现_八大排序算法的python实现(五)堆排序
  6. eclipseini设置使用的jdk_设置 Maven 对应的JDK 版本
  7. python怎么画图表_Python 使用pycha画图表
  8. Hindex--华为Hbase二级索引
  9. CentOS7 网络配置--NAT模式
  10. 正则表达式,时间戳和日期互相转换