遇到的状况大体说明:前端
项目基于Vue2全家桶实现,vue-router
控制前端路由,路由模式是History
(主要是领导追求过高,以为hash带#号太丑,而后遇到了小坑...),主要是服务于微信端,因而乎天然要使用jssdk。vue
目前实现的功能其实很简单,只是点击而后调用jssdk,上传图片至本身服务器,成功的状况下返回一个可使用的图片urlios
好吧,其实最大的问题是,我在此以前根本没有接触过微信端相关,天然没啥经验,因而乎且行且努力吧。web
要调用jssdk第一步,天然是引入jssdk文件后,配置jssdk而后注入页面。按照文档的需求,配置中须要的数据是后端进行运算后获得的,因此前端经过ajax将部分进行运算必要的数据传给后端,而后返回进行配置所须要的数据就能够了。ajax
进行实际配置时,因为在文档看到了一段红色的文字....尤为是我加粗的这段文字vue-router
全部须要使用JS-SDK的页面必须先注入配置信息,不然将没法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,因此使用pushState来实现web app的页面会致使签名失败,此问题会在Android6.2中修复)。后端
我当时伪装思考了一下....既然文档说在每次url变化时进行调用,那么我就想固然的在Vue-router
的钩子router.beforeEach
中调用ajax,进行获取数据,配置jssdk(以上操做封装在函数内),这么不带脑的作法致使的是刷新页面时不会调用...因而改为在组件生命周期钩子中调用,再也不监听路由变化。数组
理想是好的,计划也是完美的,进行测试时老是出错,由外部连接直接进入,获取本页面刷新后jssdk都是正常使用的,然而一旦退出页面,由微信公众号入口从新进入,那么就会遭遇invalid signature
的错误,jssdk配置失败。浏览器
通过数小时后,终于发现:服务器
以上的问题,暂时没有在安卓中发现,而后若是不但愿出现这样的问题,能够采用比较丑的hash模式路由,由于在hash模式下,会忽略掉#号后面的内容。
目前采用的方法很简单,但须要后端支持。
调用wx.chooseImage
获取到 localIds
(注意:是数组)而后调用 wx.getLocalImgData
获取到图片的base64
数据,文档上说能够直接用img
标签显示,因而乎,直接经过ajax
将base64
上传至后端,后端进行2进制解码就能够得到图片了。
其实以前一直在想,既然可以由localIds直接获取到图片的base64数据,那么能不能直接上传图片...因为项目工期问题,一直还没去测试...若是有大神看到,而且知道,请留言说一下哈,谢谢。