这的场景是 小程序webview 加载 H5应用
需求点:
1. 小程序的登录code 需要与H5应用的sessionId建立绑定关系
2.H5内发起微信小程序支付,支付参数传递到小程序,支付结果传递回H5
 
需求1
 方案1 :小程序新开一个空白页面专门用于 code 与session 的绑定请求,然后返回index首页
 
实现过程:
H5中发送 session参数 给小程序
const path = '/pages/session/session' + param;
// 通过JSSDK的api使小程序跳转到指定的小程序页面
wx.miniProgram.navigateTo({
url: path,
});
小程序 session 页面
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
    if (options.sessionId) {
        // 接收参数
        this.sessionId = options.sessionId;
        console.log("get webview sessionId:" + options.sessionId);
        wx.setStorageSync('sessionId', options.sessionId);
    }
 
    this.loginCode = wx.getStorageSync('loginCode');
    this.sessionId = wx.getStorageSync('sessionId');
 
    if (this.sessionId && this.loginCode) {
    // 绑定 操作请求
    this.bindSessionIdWithLoginCode(this.sessionId, this.loginCode);
    wx.navigateBack({})
}
此方案的 缺点,每次启动小程序 进入绑定操作会进入一次空白页然后返回,给人闪回首页的视觉 用户体验不好
方案2 将H5获取sessionId 的请求放在小程序中,得到sessionId后 通过小程序webview 的URL传递sessionId给H5,并且H5此时才开始第一次加载数据,解决方案的闪回的不好体验
index.wxml 使用条件加载的方式 让 webview 在需要的时候才开始加载
<web-view wx:if="{{webUrl}}" src="{{webUrl}}" bindload="loadSucces"></web-view>
index.js 
    onLoad: function (options) {
        var _this = this;
        app.toLogin().then(function (res) {
        _this.getSessionId();
        console.log('登录后');
        console.log(res);
        });
   }
 
  getSessionId(){
    var that = this;
    // last sessionId
    if (wx.getStorageSync('sessionId')){
        that.bindSessionIdWithLoginCode(wx.getStorageSync('sessionId'), wx.getStorageSync('lo        ginCode'));
    } else {
    // new sessionID
    wx.request({
        url: 'https://zeno-****',
        data: {},
        success: res => {
            if (res.data.sessionId) {
                wx.setStorageSync('sessionId', res.data.sessionId);
                wx.setStorage('sessionId', res.data.sessionId);
 
                that.bindSessionIdWithLoginCode(res.data.sessionId, wx.getStorageSync('loginC                ode'));
            } else {
                _this.getSessionId();
            }
            console.log('sessionId success!' + JSON.stringify(res));
 
        },
        fail: error => {
            console.log('sessionId error!');
 
            }
       })
        }
    },
 
    bindSessionIdWithLoginCode: function (sessionId, loginCode) {
        var that = this;
        wx.request({
            url: 'https:/**/openapi/element/wechat/auth/' + sessionId + '/' + loginCode,
            data: {},
        success: res => {
            if (res.data === 'success') {
                console.log('bind success!’);
                // 关键点在 绑定成功后 开始加载 webview
                that.setData({
                webUrl: getApp().globalData.host + "#/return_url?wxlogincode=" + encodeURI(se                ssionId)
            })
            console.log(that.data.webUrl);
 
          } else {
            // new code past time sessionId get new sessionId
            wx.removeStorageSync('sessionId');
            that.getSessionId();
          }
        },
        fail: error => {
            console.log('bind error!');
         }
        })
       },
 
    })
在 H5中通过路由拦截获得 小程序加载webview时 传递来的 sessionId
    this.router.events.pipe(filter(e => e instanceof NavigationEnd)).subscribe((e: any) => {
    console.log(e);
    if (e.url.indexOf('/return_url?wxlogincode') > -1) {
        localStorage.setItem('sessionId', e.url.split('=')[1]);
        window.location.replace('https://h5.fuwugu.net');
    return;
    }
   }
 
需求2 的实现 就是 需求1中两个方案的 相互传值 结合

微信小程序与H5数据传递的更多相关文章

  1. 承接微信小程序外包 H5外包就找北京动点软件开发团队

    承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询,索取案例! QQ:372900288 ...

  2. 承接小程序外包 微信小程序外包 H5外包 就找北京动点软件

    承接小程序外包 微信小程序外包 H5外包 就找北京动点软件 长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询 QQ:372900288 微信:li ...

  3. 用 React 编写的基于Taro + Dva构建的适配不同端(微信小程序、H5、React-Native 等)的时装衣橱

    前言 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种多样,Web.React-Native.微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表 ...

  4. 从0到1构建适配不同端(微信小程序、H5、React-Native 等)的taro + dva应用

    从0到1构建适配不同端(微信小程序.H5.React-Native 等)的taro + dva应用 写在前面 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种 ...

  5. 微信小程序的ajax数据请求wx.request

    微信小程序的ajax数据请求,很多同学找不到api在哪个位置,这里单独把小程序的ajax请求给列出来,微信小程序的请求就是wx.request这个api,wx.request(一些对象参数),微信小程 ...

  6. 开发 | 如何在微信小程序的页面间传递数据?

    我们在之前发布过小程序页面传值方法的简单介绍,说明了在小程序开发中,两种常见的页面之间传值方法. 本期,知晓程序(微信号 zxcx0101)为你带来的是「倒数记日」小程序开发者带来的,小程序开发中,有 ...

  7. 用微信小程序做H5游戏尝试

    微信小程序发布后,公司虽然没有拿到第一批内测资格,但作为微信亲密合作伙伴,一定要第一时间去尝试啦.现在微信小程序刚发布还在测试阶段,可以说是1.0版本,所以框架和结构内容都还不多,相关的文档跟微信AP ...

  8. 深入分析:微信小程序与H5的区别

    作为前端工程师,从前端的视角,为大家分析下微信小程序和HTML5与之间的主要区别 第一条是运行环境的不同. 传统的HTML5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览 ...

  9. 如何在原生微信小程序中实现数据双向绑定

    官网:https://qiu8310.github.io/minapp/ 作者:Mora 在原生小程序开发中,数据流是单向的,无法双向绑定,但是要实现双向绑定的功能还是蛮简单的! 下文要讲的是小程序框 ...

随机推荐

  1. Jenkins+Ant+JMeter集成

    Tomcat是jenkins运行的容器,jenkins实际上是依赖于Tomcat才能启动的.Jenkins可以调度ant的脚本. Ant和maven类似,maven是执行pom文件,ant是执行bui ...

  2. Systematic comparison of strategies for the enrichment of lysosomes by data independent acquisition 通过DIA技术系统比较各溶酶体富集策略 (解读人:王欣然)

    文献名:Systematic comparison of strategies for the enrichment of lysosomes by data independent acquisit ...

  3. SQL的分类使用(增删改查)

    1.SQL的分类使用(*代表重点的程度)    DDL ** (Data Definition Language)数据库定义语言        用来定义数据库对象: 库 表 列 等    DCL (D ...

  4. Django 后台管理xadmin

    一. xadmin的使用 后台管理在开发中可以给我们提供很大的便利,django自带了一个后台管理admin,不过还有一个xadmin比django自带的好用一些,功能更加强大,为模型提供了版本控制, ...

  5. 【深度学习】Neural networks(神经网络)(一)

    神经网络的图解 感知机,是人工设置权重.让它的输出值符合预期. 而神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数. 如果用图来表示神经网络,最左边的一列称为输入层,最右边的一列称为输 ...

  6. Spring中的设计模式:模板模式

    导读 模板模式在是Spring底层被广泛的应用,比如事务管理器的实现,JDBC模板的实现. 文章首发于作者的微信公众号[码猿技术专栏] 今天就来谈谈「什么是模板模式」.「模板模式的优缺点」.「模板模式 ...

  7. 将Windows项目发布到Ubuntu服务器详细教程(Windows编程,Ubuntu服务器做解释器)

    前期准备 (1)专业版Pycharm(社区版没有deployment功能),学生,教师可申请免费专业版,详情可看我的博客. (2)可通过SSH连接Ubuntu服务器,并且服务器安装了Python解释器 ...

  8. React Hook挖坑

    React Hook挖坑 如果已经使用过 Hook,相信你一定回不去了,这种用函数的方式去编写有状态组件简直太爽啦. 如果还没使用过 Hook,那你要赶紧升级你的 React(v16.8+),投入 H ...

  9. RFID 有源,半源和无源的区别

    RFID电子标签是由标签.解读器和数据传输和处理系统组成.内存带有天线的芯片,芯片中存储有能够识别目标的信息,主要作用都是为了识别货物.(更具体的自行搜索,本文单独讲三种的区别) RFID分为三种 有 ...

  10. [noip模拟]祖孙询问<LCA>

    [问题描述] 已知一棵n个节点的有根树.有m个询问.每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系. [输入格式] 输入第一行包括一个整数n表示节点个数. 接下来n行每行一对整数对a和b表示 ...