浅析微信小程序和web之间的交互(代码分享)

 4511

本篇文章给大家了解一下微信小程序和web之间的交互,有需要的朋友可以参考一下,希望对你们有帮助。


浅析微信小程序和web之间的交互(代码分享)


背景

通常我们写了一套自适应的web程序,想在多种环境中使用.比如app里,微信小程序里,各种app分享中,假如只是能使用app浏览,问题不大,但是要在被嵌入app里面和app本身交互,就要做各种折腾,如是就有了本文。

接入条件

首先得有开发者权限

你得有台服务器,有权限上传文件,不然验证无法通过

必须是企业小程序,个人和海外小程序无法使用web-view组件

你的相关域名配置了有效的证书,并且开启了https服务

你要访问的网址必须加入了业务域名白名单,网址所调用的api接口必须加入了服务器域名白名单,并且api接口也使用的https协议

以上条件必须同时满足,缺一不可微信JSSDK引入

微信 JSSDK 引入

外部引入

  1. <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
  2. //进一步提升服务稳定性,当上述资源不可访问时,可改访问
  3. <script type="text/javascript" src="http://res2.wx.qq.com/open/js/jweixin-1.4.0.js "></script>

使用AMD/CMD标准模块加载方法加载

安装

  1. npm i weixin-js-sdk

判断是微信小程序环境

通过userAgent为micromessenger,或者window.__wxjs_environment来判断

从微信 7.0.0 开始,可以通过判断userAgent中包含miniProgram字样来判断小程序web-view环境。

  1. import wx from "weixin-js-sdk";
  2.  
  3. let OS = "PC"; //假设有多种环境
  4.  
  5. let ua = window.navigator.userAgent.toLowerCase();
  6. if (
  7.   ua.indexOf("micromessenger") >= 0 ||
  8.   window.__wxjs_environment === "miniprogram"
  9. ) {
  10.   //在微信或者小程序中
  11.   wx.miniProgram.getEnv((res) => {
  12.     if (res.miniprogram) {
  13.       //在小程序中
  14.       OS = "wxminiprogram";
  15.       window.wx = wx;
  16.     } else {
  17.       //在微信中
  18.       OS = "weixin";
  19.     }
  20.   });
  21. }

引入了sdk,知道了环境变量,下面就是开干了。

交互示例小程序端

使用小程序端的组件,新建/page/webview/index.wxml

web-view会自动铺满整个小程序页面,个人类型与海外类型的小程序暂不支持使用。客户端6.7.2版本开始,navigationStyle: custom对组件无效

  1. <!-- 通过src 来传递当前url, 通过bindmessage 来监听html的传值 -->
  2. <web-view src="{{url}}" bindmessage="getMessage" />

新建/page/webview/index.js

  1. // pages/webview/index.js
  2. const app = getApp();
  3. Page({
  4.   data: {
  5.     url: "",
  6.     shareData: {},
  7.     postData: {},
  8.   },
  9.   onLoad: function (options) {
  10.     // nickName ,token 是登录之后拿到的信息 , 用来和h5 交互
  11.     let nickName = wx.getStorageSync("nickName");
  12.     let token = wx.getStorageSync("token");
  13.  
  14.     let url = options.url;
  15.     if (url) {
  16.       //请注意传递url 请务必使用 decodeURIComponent 和 encodeURIComponent , 不然会白屏
  17.       url = decodeURIComponent(url);
  18.     }
  19.     //因为小程序 貌似还不能主动和H5 交互,所以拿到的登录信息,我们通过url 来传递.
  20.     let localUrl = "";
  21.     if (token) {
  22.       localUrl = url + "?token=" + userToken + "&nickName=" + nickName;
  23.     }
  24.     //犹豫地址存了token 和其他信息,分享会暴露,所以要手动重置分享地址 数据为 shareData
  25.     this.setData({
  26.       url: localUrl,
  27.       shareData: {
  28.         titil: "测试小程序",
  29.         desc: "测试小程序藐视描述",
  30.         path: url,
  31.       },
  32.     });
  33.   },
  34.   getMessage(e) {
  35.     //此处接收html传递过来的参数
  36.     this.postData = e.detail.data;
  37.   },
  38.   /**
  39.    * 用户点击右上角分享
  40.    */
  41.   onShareAppMessage() {
  42.     //重置分享链接和路径
  43.     return {
  44.       title: this.shareData.title,
  45.       desc: this.shareData.desc,
  46.       path: this.shareData.path,
  47.     };
  48.   },
  49. });

交互示例web端

在web端,我们知道如何判断web是在小程序中,可以通过微信jsskd直接发送交互信息,和在原生的微信小程序里一样

做路由跳转

  1. // 前面我们已经定义了window.wx = wx ,这里可以直接调用
  2. // 还可以通过url 来获取token 等相关信息
  3.  
  4. if (OS == "RN") {
  5.   //这里假设我们有多重环境..
  6. }
  7. if (OS == "wxminiprogram") {
  8.   wx.miniProgram.navigateTo({
  9.     url:
  10.       "/pages/webview/index?url=" +
  11.       decodeURIComponent("https://www.chuchur.com?id=100"),
  12.   });
  13. }

给小程序发送数据

  1. wx.miniProgram.postMessage({
  2.   data: {
  3.     hello: "wrold",
  4.   },
  5. });
  6. //web-view 则通过 bindmessage 来监听 传过来的数据

更多方法

  1. wx.miniProgram.navigateBack(); //返回
  2. wx.miniProgram.switchTab(); //切换底部的导航
  3. wx.miniProgram.reLaunch(); //重新加载
  4. wx.miniProgram.redirectTo(); //地址重定向
  5. wx.miniProgram.getEnv(); //获取当前环境

相关问题

你有没有遇到过redirectTo死都无法跳转的问题呢,你怎么改他都不执行,或者执行成功了,还是无法跳转,你甚至改为redirectTo都没有用。

因为redirectTo无法跳转到当前的page,以及在app.json下面tabBar=> list里面定义的pagePath,假如你要跳转的url刚好在pagePath里面定义过,那么请使用switchTab。


更多 API

请参见官网API的地址:

https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

请参见微信JS-SDK说明文档的地址:

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html




TAG标签:
本文网址:https://www.zztuku.com/index.php/detail-9071.html
站长图库 - 浅析微信小程序和web之间的交互(代码分享)
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐