最近,公司的微信项目,遇到一个怪事,总是有用户反馈,第一次打开页面的时候,很大几率会白屏,就是空白一片,什么都没有,关掉重新打开,或者刷新之后就行了。最最重要的是,老板都遇到了好几次,一声令下,要求必须解决,没办法,只能硬着头皮上了。
度娘也救不了我
内事不决问百度,外事不决问谷歌!咱IT,就喜欢百度,百度大神总能给个答案。然后,这次百度也不好使了,和我相同症状的也有,但是回答的一个也没有。。。。神啊,谁来救救我
一波未平一波又起
得,白屏问题,还没有解决,老板又发现新问题了,说是,怎么我们的页面总是弹广告呀,也没广告公司给咱钱呀。不过这问题,简单,我经验丰富呀,不假思索的就说,这是运营商网络劫持,换个DNS就好,从根本上解决的方法是启用HTTPS。。。啪啦啪啦一堆,不管老板信不信,反正我自己都晕了。不过,晕归晕,晕乎乎的我,鬼使神差的,突然相到,白屏会不会是运营商劫持导致的。
大胆假设,严谨认证
我们公司的微信项目,是单页面应用,所以白屏的可能性,有以下几种:
- 1、HTML未加载
- 2、js加载出现异常
- 3、ajax请求,服务器一直不响应
很快,1,3两点被排除,应为我在HTML中,运行js前,加了一个loading菊花,从此白屏没有了,无限菊花出现了。。。。
原因锁定,是js加载异常。
白屏出现时偶然的,运营商劫持也是偶然的,白屏刷新就好,运营商劫持,大多数也是刷新就好。这特征也对上了,最最重要的是,运营商劫持的主要手段不就是加代码或者注入js吗。
不过,这还是不知道原因。所以我不得不研究劫持的方法。
杭州电信的劫持方法
公司用的杭州电信,老板家也是用的杭州电信,而且都有劫持现象,所以就研究杭州电信劫持,毕竟老板需求优先吗。
经过我反复尝试与重现,发现杭州电信的劫持方法是,比如,你请求jq文件,但是他替换后,返回的是运营商的js,这段js主要功能,一方面注入运营商的广告,另一方面就是重新下载你原本的js文件。
问题就出现这个重新下载上面
根本原因
重新下载js,由于是异步的,所以会导致重新下载的文件顺序被改变到最后,比如,我依赖jq,结果他把jq给我最后加载,导致,我的文件先执行,然后在加载jq。。。。这就是白屏的由来。
然后,运气好的时候,替换的不是我的强依赖文件,而且类似微信的JSSDK文件,那样的话,只是出现广告而已
解决方法
找到原因以后,我突然发现,针对这一流氓行为,我居然束手无策.
最好的方法是使用HTTPS协议,但是客观原因,暂时公司无法启用HTTPS(幸好公司最终决定,明年开始转到HTTPS).
最后,没办法,只能先解决白屏问题,就是将多个js打包成一个js,这样就算被替换了,至少最后还能正常运行,不至于白屏。
后来,我们CTO苦思冥想之后,认为,可能我们的静态CDN郁闷被运营商盯上了,所以,先换了一个域名,至今快1周时间了,暂时没有发现植入广告或者白屏现象,就是不知道,这种情况还能维持多久。
总结
国内流氓太多,在公司成本允许的情况下,还是快点启用HTTPS吧
日志
2016-11-12 创建