移动端H5开发遇到的坑

微信分享签名错误invalid signaturevue单页应用history模式下微信分享一直提示签名错误invalid signature按照微信官网文档,已经引入jssdk,正确的配置js安全域名,后台开发人员生成的签名也通过微信签名工具验证,但是前端的自定义分享一直报签名错误,没有办法自定义分享,如果确保了哪些基本配置没有问题,并且签名也通过了微信签名工具验证,那么可能就是前端访问的url和后台生成签名的url不一致导致的签名错误前端如果是通过ajax将url传到后端获取签名,那么我们需要将当前页面除去’#‘hash部分的链接,并且需要encodeURIComponentlet url = location.href.split(’#’)[0]encodeURIComponent(url)正常来说这样就可以实现微信自定义分享了,但是单页应用路由切换了之后IOS端还是提示签名错误,安卓端没有问题这是因为history模式下视图是通过pushState来切换的,但是IOS微信客户端(安卓客户端已经修复了)不支持pushState的H5新特性,所以路由变化了但是微信浏览器获取到的url没有变化,右上角复制链接发现,微信记录的url还是第一次进入时的url,除非你手动刷新,或者使用window.location等页面跳转方法刷新,才能获取到最新的url解决的办法是页面进入的时候记录url,如果是iOS设备那么使用这个url获取微信签名router.afterEach(to => { sessionStorage.setItem(‘currentUrl’,window.location.href)})let url = encodeURIComponent(location.href.split(’#’)[0])if(system == “iOS” && sessionStorage.getItem(‘currentUrl’)) { url = encodeURIComponent(sessionStorage.getItem(‘currentUrl’).split(’#’)[0])}这个时候拿这个url去获取微信签名就是正确的了,该方法只适合IOS设备,只要获取签名的url和微信记录的url一致签名就是正确的往返缓存问题点击浏览器的前进和回退,有时候不会自动执行js,特别是在safari中,这与往返缓存(bfcache)有关系。解决方法 :window.onunload = function(){};如果是Vue单页应用,并且使用了keep-alive的话,页面也不会刷新,这时候一些接口请求等可以放在beforeRouteEnter方法中IOS端不支持new Date(“2019-01-01 00:00:00”) 这种格式这种写法new Date(“2019-01-01 00:00:00”)在安卓端是支持的,但是在IOS端不支持,会报NAN错误,所以需要把new Date(“2019-01-01 00:00:00”)改成new Date(“2019/01/01 00:00:00”)这种形式let date = ‘2019-01-01 00:00:00’date.replace(/-/g, ‘/’)微信二维码一个页面可能有多个二维码,但是长按识别二维码只能识别最后一个二维码,这个时候我们需要控制页面可视区域内只能出现一个二维码IOS中无法点击span,div 等默认无法点击的标签, IOS中监听click事件点击无效解决办法,添加 cursor: pointer;audio音频无法播放audio.play() 方法在安卓设备可以正常播放,但是在IOS客户端不能播放,在设置了audio的src之后,我们需要加上这一行代码audio.load() 去加载音频可以通过监听loadeddata方法看音频是否可以开始播放了,安卓设置在音频加载好了之后就开始播放,但是iOS端可能稍微有延迟,这个时候我们可以通过audio.currentTime获取到音频是否开始播放,这个值大于0就说明已经开始播放了IOS移动端click事件300ms的延迟响应fixed问题在ios8以下系统,当小键盘激活时,都会出现位置浮动问题,解决方法:只需要在中间部分外层div添加css样式position:fixed;top:50px; bottom:50px;overflow:scroll;

March 29, 2019 · 1 min · jiezi

H5 视频播放 video使用总结

最近用vue在做一个H5页面,有一个播放视频的功能,做完了总结一下关于video的用法,详细原文,大家可以点这里https://developer.mozilla.org…1、如果你只是单纯的想在页面播放一个视频,下面的代码已经足够了,还支持ios和Android小窗播放 <video class=“video” controls> <source src="../company.mp4" type=“video/mp4”> </video>2、但是实际需求不会这么简单,老板还希望在H5上有个表单提交的功能,没问题,在下面加就是,表格出来了但是我点了视频播放,然后再提交表单,在Android懵逼了视频把表单挡住了,ios是没有这个问题的,这怎么搞呀我的解决办法是 <video playsinline=“true” x-webkit-airplay=“true” x5-playsinline=“true” webkit-playsinline=“true” x5-video-player-type=“h5” controls > <source src="../company.mp4" type=“video/mp4”> </video>这样在Android端视频是会全屏播放的,你要提交表单就要暂停视频,那样就会退出全屏,然后操作表单,视频在暂停的情况下是不会挡住表单的播放视频退出视频点击表单,发现不会被挡住了3、上一个问题解决了,但是又有一个问题,就是点开H5进去后,ios显示视频是一片白,Android是一片黑,老板希望视频没播放前显示视频首屏的图片。iosAndroid查了一下网上的解决办法都是用dom解决,有兴趣的朋友可以看一下https://blog.csdn.net/qq_4095…我觉得比较麻烦,就去看了一下开发者文档,就发现了一个彩蛋,比上面的方法要简单得多,一行代码解决问题video有poster这个属性poster A URL for an image to be shown while the video is downloading.If this attribute isn’t specified, nothing is displayed until thefirst frame is available, then the first frame is shown as the posterframe.它的例子也有解析Until the video starts playing, the image provided in the posterattribute is displayed in its place. If the browser doesn’t supportvideo playback, the fallback text is displayed.所以我最后的代码是如下: <video class=“video” poster="../assets/video.png" playsinline=“true” x-webkit-airplay=“true” x5-playsinline=“true” webkit-playsinline=“true” x5-video-player-type=“h5” controls > <source src="../company.mp4" type=“video/mp4”> </video>ios端完美Android端完美到这里就记录一下这次的问题 ...

December 14, 2018 · 1 min · jiezi