【uni-app】App与webview双向实时通信

【uni-app】App与webview双向实时通信

在 Uniapp 中,App 与 里面嵌入的 webview 进行双向的实时通信

vue2 , 模拟器

主要分为两部分

  • webview 向 app 发送信息

  • app 向 webview 发送信息

以下是实现方式,用一个例子来说明

(文章最后我会放这个例子的github地址)

webview 向 app 发送信息

示例: webview 里面向 app 发送 图片的 base64 , app 保存图片到系统相册;

此处分为, app 和 webview 部分:

  • app 注册事件

  • webview 触发 app 的事件

app部分
  1. 保存到系统相册功能(功能具体细节不重要)

    // utils/appMessageHandler.js
    // 这里代码都在app下执行
    function appSaveImgFile(params) {
      const { base64, downloadName } = params
      const bitmap = new plus.nativeObj.Bitmap("test");
      bitmap.loadBase64Data(
        base64,
        function () {
          const url = "_doc/" + downloadName + ".png"; // url为时间戳命名方式
          bitmap.save(
            url,
            {
              overwrite: true, // 是否覆盖
              // quality: 'quality'  // 图片清晰度
            },
            (i) => {
              plus.gallery.save(
                i.target,
                function () {
                  uni.showToast({
                    title: "APP图片保存至相册",
                    icon: "none",
                  });
                  bitmap.clear();
                },
                function (e) {
                  uni.showToast({
                    title: "APP图片保存至相册失败:" + JSON.stringify(e),
                    icon: "none",
                  });
                  bitmap.clear();
                }
              );
            },
            (e) => {
              uni.showToast({
                title: "图片保存失败1:" + JSON.stringify(e),
                icon: "none",
              });
              bitmap.clear();
            }
          );
        },
        (e) => {
          uni.showToast({
            title: "图片保存失败2:" + JSON.stringify(e),
            icon: "none",
          });
          bitmap.clear();
        }
      );
    }
    
    export {
      appSaveImgFile,
    }
    
  2. 在App.vue中注册事件;将 appMessageHandle.js 里面所有导出的事件进行注册;注意需要条件编译

    // App.vue
    <script>
    import * as appPlusMessageHandler from "./utils/appMessageHandler";
    
    export default {
      data() {
        return {
          appRegisterMap: undefined,
        };
      },
      onLaunch: function () {
        console.log("App Launch");
        // #ifdef APP-PLUS
        // 注册事件
        plus.globalEvent.addEventListener("plusMessage", this.plusMessageHandler);
        // #endif
      },
      methods: {
        /**
         * 将所有导出的 app 事件
         * 用 map 建立 函数名 - 函数 的联系
         * 返回 map
         */
        registerAppPlusMap() {
          if (this.appRegisterMap) {
            return this.appRegisterMap;
          }
          let map = new Map();
          Object.keys(appPlusMessageHandler).forEach((item) => {
            map.set(item, appPlusMessageHandler[item]);
          });
          this.appRegisterMap = map;
          return map;
        },
        /**
         * 用 act
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值