在部分Android机型中的UC浏览器下访问,出现白屏现象
之前遇到过类似的问题,第一反应应该是babel-polyfill
的问题,要么没有引入要么是引入的方式不对。
看了一眼 main.js 中babel-polyfill的引入位置,之前并不是在最顶部的位置引入的,于是调整到最顶部的位置
import 'babel-polyfill'
import Vue from 'vue'
import ...
另外babel-polyfill
还有另一种引入方式,在webpack的配置文件入口处,加入babel-polyfill
entry: {
// app: './src/main.js'
app: ['babel-polyfill','./src/main.js']
}
以上两种方案尝试过后,测试人员反馈问题依然存在。由于身边没有出错的真机,无法获取报错信息,于是只好去搜索引擎和github上继续根据现象寻找解决方式。
在这个名为“vue-cli创建的项目打包后在安卓手机qq浏览器和uc浏览器页面空白”issue中,有人提出说锁定webpack-dev-server
的版本可以解决问题:
我这边把webpack-dev-server锁定到2.7.1版本就可以用了,你们可以试下
于是决定尝试一下,测试环境更新代码后,测试人员反馈白屏问题依然存在。意识到这种漫无目的的方式并不能快速解决问题,接下来便寻求于寻找真机测试获取报错信息,根据控制台报错信息定位并解决问题。
之前有用过百度和腾讯的几款移动测试平台可以远程真机调试。百度的移动云真机测试倒是有对应的机型,但是收费策略调整后现在是完全收费了。腾讯的几款,有的是没有对应机型,有的需要VIP权限(变相收费)。
想到是否有类似全局的错误事件,如果有的话直接在事件中alert出错误信息,再让测试人员截图,不必真机调试就能获取报错信息了。window.onerror
正好可以解决这个问题。等到测试环境代码更新后,正好到了下班时间,打算第二天继续测试,让测试人员看是否有错误弹窗。
第二天测试人员告诉我,问题机型的UC浏览器可以正常访问了。猜测可能是测试时上面的几种改动由于缓存没有及时生效,到了第二天才生效。
-webkit-box-orient: vertical;
这个css属性在开发环境可以生效,却在打包后的测试环境神奇的消失了!
autoprefixer 的问题,在css属性的前后加上如下的开启和关闭autoprefixer 的注释
/*! autoprefixer: off */
-webkit-box-orient: vertical; // 参考 https://github.com/postcss/autoprefixer/issues/776
/* autoprefixer: on */
播放器在手机浏览器或者chrome开发者工具(手机模式)内,点击播放按钮,播放与暂停事件会被触发多次。
是FastClick.js的bug,大概原因要从FastClick.js的原理说起。FastClick是为专门为解决移动端浏览器300毫秒点击延迟问题所开发的一个轻量级的库。简而言之,FastClick在检测到touchend事件的时候,会通过DOM自定义事件立即触发一个模拟click事件的click事件(自定义事件),并把浏览器在300毫秒之后真正触发的click事件阻止掉。FastClick非常实际地解决300毫秒点击延迟的问题。
那么bug发生的地方就是在阻止300毫秒之后真正触发的click事件这个阶段。如果阻止失败的话,相当于再次触发了点击事件,就会产生播放与暂停相继多次触发的问题。
解决方式粗暴了一些,参考了这个博客中作者的解决方式。通过修改FastClick.js的源码,增加了vjs
这个class的验证。
在微信浏览器自动播放问题需求是在视频列表页显示视频封面以及播放按钮,为了提高页面性能以及兼容某些手机浏览器厂商,避免一些用户体验问题,此时并未显示video标签,当点击某个视频的播放按钮后,显示一个全屏的视频,并自动开始播放。问题就是当显示全屏的视频时,通过内部的状态控制自动播放是不生效的,就会造成这样的现象:在列表页点击视频播放按钮后,需要再点击一次播放按钮才能播放。
autoplay
的支持依赖内核和网络状况,比如iPhone在蜂窝网络下明确禁用了autoplay
;
经过试验,在没有明确的用户操作的情况下,直接通过video.play()
也是无法激活播放的;
微信上播放视频必须是用户点击实际的dom后再调用播放器的play属性才可以实现自动播放,比如可以把加载好的播放器实例提前保存,当用户点击播放按钮后在点击的回调里触发播放器的播放事件。