wechat-小程序web-view与网页交互

wechat-小程序web-view与网页交互.

官方api说明文档: https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html


前置物料

  1. 启动好一个网页服务. 比如: http://localhost/SimpleThreeJsExample/index-wx.html

步骤

  1. 在Pages下 新建一个 小程序页面. (四件套)

    • web001.wxml

      1
      2
      3
      <view class="container">
      <web-view src="{{myWebUrl}}" bindmessage="msgHandler"></web-view>
      </view>
      • myWebUrl: 在程序上动态设置的目的 网页地址
      • msgHandler: 处理网页返回的信息
    • web001.js

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      import { gLog } from '../../src/module/log/Logger.js'; // 我自己封装的日志

      Page({
      data: { // 初始化 web001.wxml 中的初始数据
      myWebUrl: ""
      },
      onLoad: function (options) {
      gLog("--- web001 onLoad")

      let toWebArgs = {
      arg1: "hello",
      arg2: 1234,
      }
      let url = `http://localhost/SimpleThreeJsExample/index-wx.html?arg1=${toWebArgs.arg1}&arg2=${toWebArgs.arg2}`

      this.setData({ myWebUrl: url }); // 动态设置 url
      },

      /**
      * 用户分享时可获取当前<web-view/>的URL,即在onShareAppMessage回调中返回webViewUrl参数。 console.log(options.webViewUrl)
      */
      onShareAppMessage: function (options) {
      gLog("--- web001 onShareAppMessage, options:", options)
      },

      // 网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data }
      msgHandler: function(args) {
      // gLog("--- web001 msgHandler", args)
      gLog("--- web001 msgHandler", args.detail)
      },
      })
  2. 网页 index-wx.html 引入 jweixin-1.3.2.js.

    1
    2
    3
    4
    hello world
    <!-- for 微信小程序 web-view -->
    <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
    <script type="text/javascript" src="asset/js/wx/wx-logic.js"></script> <!-- 自定义逻辑代码 -->
    • wx-logic.js. 逻辑代码都丢到里面.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      console.log("--- wx-logic ok")

      document.querySelector('#redirect').addEventListener('click', () => {
      wx.miniProgram.redirectTo({ // 调用小程序api
      url: '../index/index'
      })
      // wx.miniProgram.navigateBack({
      // delta: 1
      // })
      }, false);

      // 获取网络参数
      function GetRequest() {
      var url = location.search; //获取url中"?"符后的字串
      var theRequest = new Object();
      if (url.indexOf("?") != -1) {
      var str = url.substr(1);
      strs = str.split("&");
      for(var i = 0; i < strs.length; i ++) {
      theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
      }
      }
      return theRequest;
      }

      var args = GetRequest();
      console.log("--- args", args)

      args.webData = "world" // 随便增加点web的数据
      // 向小程序发送信息
      wx.miniProgram.getEnv(function (res) {
      console.log(res.miniprogram) // true
      if (res.miniprogram) {
      wx.miniProgram.postMessage({ data: args, args: args })
      console.log("asdasdasd")
      } else {
      console.log("just support wx")
      }
      })

      // TODO: 直接显示模型
      const threeHelper22 = new ThreeHelper();
      threeHelper22.loadObject('asset/model/aaa002.fbx');
  3. 测试.

    • 内网测试. 在小程序工具中 需要勾选 不校验 业务域名 验证

    • 外网: TODO:

    • 运行


参考


ps

  • 小程序中暂时不能输出 网页端 的log.

    fixed: 可以通过 alert("--- 加载模型: name:" + args.name) 把日志在开发工具中显示出来


源码仓库