最近vue的单页应用在测试时遇到一个比较严重的问题,在微信内调起微信支付老是报错,排查后发现是安全域名的设置有问题。vue的单页应用有两种模式,hash和history两种,而hash模式下的url是有一个‘#’的,导致唤起微信支付的url不固定。但是微信的一个商户平台只能添加5个安全域名,如果要把它的多种情况都写入明显是不可能的。而history模式是需要后台去配合的。那怎么单纯的前端去解决呢?

// 例如你的url是这样的

test.com/#/

// 唤起微信支付的页面url是这样的

test.com/#/recharge

// 这种情况下唤起微信支付的url会变得不固定。
// 如果刚重定向完成,可能是这样的

test.com/#/
test.com/#/recharge

// 如果退出微信后再进入,唤起微信支付的url又可能变成这样

test.com

简直被搞得晕头转向有没有。
第一种解决方法就是后台配合使用Vue的history模式了,这样url中没有‘#’,看起来也比较美观一点,官网里有详细的教程。vue-router HTML5 History模式
但是有些情况可能后台不能更改,这时候就只能找其他解决方法了。

第二种方法是在‘#’前加一个‘?’。

// 你的链接就变成了这样

test.com/?#/

// (更难看了有没有……)

// 然后H5的安全域名就可以设置为下面一种了

test.com

// 但是需要注意的是,你的首页地址就要变成带‘/?#/’的形式了,因为‘?’是不会默认添加的
// 首页
test.com/?#/

这样就没有问题了,但是url真的变得很难看。。。

PS:看到有一些人说这种方法会导致微信下的‘返回’键直接退出网站,我测试是没有这种情况的,不知道其他版本。再贴一个知乎的相关链接

原文链接:http://blog.csdn.net/qq_25243451/article/details/78872059

Logo

前往低代码交流专区

更多推荐