日常爬坑

遇到的情况大致说明:

  • 项目基于Vue2全家桶实现,vue-router控制前端路由,路由模式是History(主要是领导追求太高,觉得hash带#号太丑,然后遇到了小坑...),主要是服务于微信端,于是乎自然要使用jssdk。

  • 目前实现的功能其实很简单,只是点击然后调用jssdk,上传图片至自己服务器,成功的情况下返回一个可以使用的图片url


关于jssdk配置错误

好吧,其实最大的问题是,我在此之前根本没有接触过微信端相关,自然没啥经验,于是乎且行且努力吧。

要调用jssdk第一步,自然是引入jssdk文件后,配置jssdk然后注入页面。按照文档的需求,配置中需要的数据是后端进行运算后得到的,所以前端通过ajax将部分进行运算必要的数据传给后端,然后返回进行配置所需要的数据就可以了。

进行实际配置时,由于在文档看到了一段红色的文字....尤其是我加粗的这段文字

所有需要使用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配置失败。

经过数小时后,终于发现:

单页面的情况下,ios(微信)的url永远不变,简单来说,就是单页面应用,无论前端路由怎么进行变化,但是微信始终认为你的路由没有变化....是最初进入网站时的url,所以进行配置单页面应用进行配置jssdk时,只需要在初始化应用时,获取到进入应用时的url,进行一次ajax请求,然后配置jssdk就可以了....只需要第一次....

重要的事情再强调一次,单页面应用的情况下,微信会判断最初进入应用的url作为整个单页面应用的根url,进入应用后无论前端路由怎么修改,微信浏览器始终认为最初进入应用的url是当前的url。

以上的问题,暂时没有在安卓中发现,然后如果不希望出现这样的问题,可以采用比较丑的hash模式路由,因为在hash模式下,会忽略掉#号后面的内容。


关于通过jssdk图片选择接口,不经过微信临时服务器,直接传递图片至自己服务器。

目前采用的方法很简单,但需要后端支持。

调用wx.chooseImage 获取到 localIds (注意:是数组)然后调用 wx.getLocalImgData 获取到图片的base64数据,文档上说可以直接用img标签显示,于是乎,直接通过ajaxbase64上传至后端,后端进行2进制解码就可以获得图片了。

其实之前一直在想,既然能够由localIds直接获取到图片的base64数据,那么能不能直接上传图片...由于项目工期问题,一直还没去测试...如果有大神看到,并且知道,请留言说一下哈,谢谢。

前端工作日常爬坑之——单页面微信开发Jssdk相关,以及jssdk图片直传自己服务器的实现。的更多相关文章

  1. (转)前端:将网站打造成单页面应用SPA

    前端:将网站打造成单页面应用SPA(一) Coffce 680 6月19日 发布 推荐 6 推荐 收藏 85 收藏,3.1k 浏览 前言 不知你有没有发现,像Github.百度.微博等这些大站,已经不 ...

  2. Python 2.7_爬取CSDN单页面博客文章及url(二)_xpath提取_20170118

    上次用的是正则匹配文章title 和文章url,因为最近在看Scrapy框架爬虫 需要了解xpath语法 学习了下拿这个例子练手 1.爬取的单页面还是这个rooturl:http://blog.csd ...

  3. Python 2.7_爬取CSDN单页面利用正则提取博客文章及url_20170114

    年前有点忙,没来的及更博,最近看爬虫正则的部分 巩固下 1.爬取的单页面:http://blog.csdn.net/column/details/why-bug.html 2.过程 解析url获得网站 ...

  4. 前端:将网站打造成单页面应用SPA

    前端:将网站打造成单页面应用SPA   前言 不知你有没有发现,像Github.百度.微博等这些大站,已经不再使用普通的a标签做跳转了.他们大多使用Ajax请求替代了a标签的默认跳转,然后使用HTML ...

  5. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之静态页面

    一.引言 接着上一篇,京东个人中心的所有功能数据分析完成之后,现在需要把静态页面完成,实现过程中要用到的技术有:Bootstrap.html5表单新特性等.除此之外,还要利用Node.js的Expre ...

  6. 使用vue-cli快速搭建大型单页面应用开发环境

    工作环境:terminal,已经全局安装了vue(可使用npm install -g vue) 全局安装vue-cli npm install -g vue-cli 创建一个基于webpack模板的项 ...

  7. 前端单页面富应用(SPA)的实现

    一. 什么是单页面富应用? 单页面应用:Single Page Application 概念:Web应用即使不刷新也在不同的页面间切换,解决浏览器前进.后退等机制被破坏等问题.并且页面访问会被浏览器保 ...

  8. 基于angularJs的单页面应用seo优化及可抓取方案原理分析

    公司使用angularJs(以下都是指ng1)框架做了互联网应用,之前没接触过seo,突然一天运营那边传来任务:要给网站做搜索引擎优化,需要研发支持.搜了下发现单页面应用做seo比较费劲,国内相关实践 ...

  9. SPA单页面应用

    什么是单页应用 单页Web应用,就是只有一张Web页面的应用.浏览器一开始会加载必需的HTML.CSS和JavaScript,之后所有的操作都在这张页面完成,这一切都由JavaScript来控制.因此 ...

随机推荐

  1. struct 和typedef struct的区别

    和int char一样struct也是一种数据类型,也可以声明变量--结构变量. 定义结构体变量的一般格式为: struct 结构名 { 类型 变量名; 类型 变量名; ... }结构变量; 另一种常 ...

  2. 部署Cloudera Management for centos 7

    hadoop生态圈框架工具甚多,自己整合起来很是繁琐,特别是oozie以及hue结合来实现hive.mr.spark等定时依赖任务更是一步一个坑,为了减少踩坑,只好从apache hadoop,转向C ...

  3. (23)IO之打印流 PrintStream & Printwriter

    PrintStream PrintStream可以接受文件和其他字节输出流,所以打印流是对普通字节输出流的增强,其中定义了很多的重载的print()和println(),方便输出各种类型的数据. Pr ...

  4. jsp中九大内置对象

    jsp实质是一个Servlet类,当jsp页面第一次被访问时,就会被服务器翻译成.java文件,紧接着就编译成.class文件. jsp<% %>和<%= %>脚本中可以直接使 ...

  5. .net Core 1.0.1 下的Web框架的的搭建过程step by step

    环境:ubuntu+VScode  数据库:mysql ,ORM框架:chloe 官网 看完本篇文章你能学会 在Vscode下创建项目,一些基础的命令 ,以及得到一个配置文件的简单读取实例 1,在VS ...

  6. [cookie篇]从cookie-parser中间件说起

    当我们在写web的时候,难免会要使用到cookie,由于node.js有了express这个web框架,我们就可以方便地去建站.在使用express时,经常会使用到cookie-parser这个插件. ...

  7. 一次SocketException:Connection reset 异常排查

    问题描述 上一期的需求上线之后,线上多了一个异常:Connection reset.如下: [2017-03-22 00:45:00 ERROR] [creativeAuditTaskSchedule ...

  8. git生成ssh key及github ssh key对接

    首先在本地安装好git工具并配置好环境变量 创建一个文件夹,在此处打开git bash: 命令>cd ~/.ssh  查看是否已经配置ssh 命令>git config --global ...

  9. 老李分享:大数据框架Hadoop和Spark的异同 2

    Spark数据处理速度秒杀MapReduce Spark因为其处理数据的方式不一样,会比MapReduce快上很多.MapReduce是分步对数据进行处理的: ”从集群中读取数据,进行一次处理,将结果 ...

  10. Android使用Path实现仿最新淘宝轮播广告底部弧形有锯齿的问题以及解决办法

    在前面一篇博文<Android高仿京东淘宝自动无限循环轮播控件的实现思路和过程>中已经基本介绍了实现轮播广告的基本思路和过程,但是仔细观察淘宝的轮播广告栏,发现在轮播广告栏的底部有个小小的 ...