微信浏览器中的title
在qq浏览器中,浏览器内核属于腾讯自己研发的X5浏览器内核(其实就是从chrome内核魔改了一下),而在微信浏览器中,在X5这个本来就是阉割版的内核中,又做了阉割。。。
其中一个比较恶心的问题在于一个网页在微信浏览器中打开时,不管我们给页面设置多少次title,微信浏览器只会抓取一次页面对title的赋值。
|
|
|
|
如上两段代码同时放在一个页面中,微信浏览器只会做一次赋值,事实上我们正常使用的话也就是显示
在开发中会给我们开发造成一种错觉,就是我写的
微信浏览器内核的逻辑是只要有新的页面就会重新给顶部title赋值一次,所以当然iframe也是个页面了,通过上面代码可以看到我们先设置title,然后建立一个iframe,给iframe一个url,加载完成就删掉它,这样就会触发微信浏览器内核的更新页面逻辑,从而重新给title赋值。
|
|
一直以为只要加载一个iframe就好了,因为每次引入一个文件或者引入一个网页都是成本,都是流量,所以我试图不加载文件,而这样并不能触发微信浏览器的重新赋值逻辑,所以其内核逻辑看来很明显,必须是加载一个网页或者文件时才会重新赋值title,所以我们也不能节省这些流量,每次都需要加载一个url,当然了,可以是图片,也可以是网页。什么都可以,越小约好啦。
Title问题引发的H5开发问题
这样的内核逻辑导致的问题是,像H5网页中的单页面开发的框架和思想(react、vue、angular之类的前端框架)都无法更换浏览器title,因为它自始至终都没有离开XXX.html,始终都是一个页面,而如果想变化title的话,只能通过上文所述的iframe方法来解决问题,而每一次更换前端路由都需要多加载一个多余的url,不管这个url有多大,对于我们开发都是很恶心的。
目前来讲这个问题完美解决的方法并没有,我提供几种可实施的方案优化:
1、iframe引入url随机化处理
|
|
类似于这种随机处理,缓解访问压力,而url流量当然是尽可能的压到最小
2、放弃单页面开发框架
像在微信浏览器中运行的H5页面一般多逻辑,多页面的我们都采用单页面开发来实现我们的需求。这样避免页面跳转,用户体验更好一些,但是如果页面变化而title不跟着变,又很难接受,所以忍痛割爱,直接放弃单页面开发模式,由后端提供路由或直接跳转html实现逻辑。
3、小程序代替H5
毫无疑问2017年的小程序绝对会是大众理论的话题,而且总体来讲,小程序的用户体验和底层框架以及组件都是比较符合当前开发的hybrid开发,底层webview和虚拟dom模式也比较容易让开发者接受,其语法糖虽需要简单研究一下,但也很简单,身边后端朋友写小程序前端也很顺畅。
所有用小程序代替H5绝对是一种从根本解决问题的方法。
实例:
拿京东的公众号举例,京东主商城采用小程序开发,一些订单查询、活动、个人中心页面都处于页面跳转的方式开发的,毕竟这些也都是一些单独的菜单跳转。相对来讲,京东的公众号开发算是比较成熟的,当然我觉得这跟腾讯与京东密切的合作有关吧。
本文结束