vue单页应用history模式下微信分享一直提示签名错误invalid signaturecss
按照微信官网文档,已经引入jssdk,正确的配置js安全域名,后台开发人员生成的签名也经过微信签名工具验证,可是前端的自定义分享一直报签名错误,没有办法自定义分享,若是确保了哪些基本配置没有问题,而且签名也经过了微信签名工具验证,那么可能就是前端访问的url和后台生成签名的url不一致致使的签名错误前端
前端若是是经过ajax将url传到后端获取签名,那么咱们须要将当前页面除去'#'hash部分的连接,而且须要encodeURIComponentvue
let url = location.href.split('#')[0] encodeURIComponent(url)
正常来讲这样就能够实现微信自定义分享了,可是单页应用路由切换了以后IOS端仍是提示签名错误,安卓端没有问题ios
这是由于history模式下视图是经过pushState来切换的,可是IOS微信客户端(安卓客户端已经修复了)不支持pushState的H5新特性,因此路由变化了可是微信浏览器获取到的url没有变化,右上角复制连接发现,微信记录的url仍是第一次进入时的url,除非你手动刷新,或者使用window.location等页面跳转方法刷新,才能获取到最新的urlajax
解决的办法是页面进入的时候记录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方法中安全
这种写法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, '/')
一个页面可能有多个二维码,可是长按识别二维码只能识别最后一个二维码,这个时候咱们须要控制页面可视区域内只能出现一个二维码
span,div 等默认没法点击的标签, IOS中监听click事件点击无效
解决办法,添加 cursor: pointer
;
audio.play() 方法在安卓设备能够正常播放,可是在IOS客户端不能播放,在设置了audio的src以后,咱们须要加上这一行代码audio.load()
去加载音频
能够经过监听loadeddata方法看音频是否能够开始播放了,安卓设置在音频加载好了以后就开始播放,可是iOS端可能稍微有延迟,这个时候咱们能够经过audio.currentTime
获取到音频是否开始播放,这个值大于0就说明已经开始播放了
在ios8如下系统,当小键盘激活时,都会出现位置浮动问题,解决方法:只须要在中间部分外层div添加css样式position:fixed;top:50px; bottom:50px;overflow:scroll;