Vue的路由默认的mode是hash,这个模式带来的bug不是一般的多,在hash模式下url地址会出现#,这个#号会使window.location.href()方法失效。并且ios微信支付的调起也会因为#的存在而导致jsap调起失败,但是Android并没有问题。因此mode的模式最好是history,这种模式下微信支付调起完全没问题。接下来就是微信分享的问题,在history模式下android还是能够正常分享,但是ios系统在这种模式下在微信浏览器下的url地址就是一开始进入页面的url,不会改变,无论路由如何的切换(android则不存在这种情况)。所以对于iPhone 需要获取用户进入页面的最初的url,并用这个url做签名。代码大致如下:
if (/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)) {
var myurl= window.sessionStorage.url.split('#')[0];
} else {
var myurl = window.location.href.split('#')[0];
}
上面的代码做了机型的判断,若是iphone则会获取最初进入页面的url,window.sessionStorage.ur是我在最初页面的设置的值。myurl是要进行签名的参数。这是最近总结的坑,希望能对大家有帮助。