首页 > 编程语言 >小程序内嵌方案

小程序内嵌方案

时间:2023-12-22 14:12:51浏览次数:16  
标签:内嵌 插件 方案 web 微信 程序 appId 页面

前言

项目开发中,分模块开发已成开发中常规方式。某个项目小程序中,可以根据登录的账号角色以及权限,加载各个不同业务的子模块,各个子模块的开发可以根据业务分散在各个业务组的开发人员中。如此可以根据项目场景灵活、快速组装好各个子模块,发布一个新的小程序。那么将各个子模块快速集成到目标主程序中,需要一个评估方案,也成为一个亟待解决的问题。
设计

查询微信文档,可知以下,小程序可以跳转、加载、嵌入的资源类型:小程序跳转小程序、小程序加载H5静态资源、小程序嵌入功能插件,微信端可以发布成果物的几种类型:小程序、公众号、插件、小游戏(排除)。得到以下几种方案

1、小程序跳转小程序路由

wx.navigateToMiniProgram(Object object)

2、小程序嵌入微信公众号页面

    new cloud.Cloud({
      appid: '公众号 AppID',
      resourceAppid: '小程序 AppID',
      resourceEnv: 'a', // 资源方云环境 ID
      traceUser: true,
    })

3、小程序加载web/H5 静态资源 (web-view)

<web-view src="{{h5Url}}" bindload="bindload" binderror="binderror"></web-view>

4、小程序调用插件

引入插件

    {
      "plugins": {
        "myPlugin": {
          "version": "1.0.0",
          "provider": "wxidxxxxxxxxxxxxxxxx",
          "genericsImplementation": {
              "plugin-index": {
                  "mp-view": "components/comp-from-miniprogram"
              }
           }
         }
       }
    }

添加插件

    {
      "usingComponents": {
        "hello-component": "plugin://myPlugin/hello-component"
      }
    }

使用插件

    <navigator url="plugin://myPlugin/hello-page">
      Go to pages/hello-page!
    </navigator>
    ​
    <plugin-view generic:mp-view="comp-from-miniprogram" />

    var myPluginInterface = requirePlugin('myPlugin');
    myPluginInterface.hello();
    var myWorld = myPluginInterface.world;

比对方案

1、小程序跳转

小程序跳转小程序路由,采用Api  ```   wx.navigateToMiniProgram(Object object) ```, 但交互体验不是很好,有弹窗提示,如下图:

 

2、微信公众号页面

需要注册公众号,每开发一个模块就要向微信注册一个公众号,同时接入对接微信js_sdk,开发流程与公众号开发流程类似, 优点:能够共享微信开放能力API 缺陷:复用性大大降低

3、嵌入H5页面

小程序加载web/H5 静态资源 (web-view), 这个方案前提条件较多

    条件一:嵌入的页面链接必须是正规的网站域名(已备案)

    条件二:需要在小程序后台下载公钥文件,并上传到网站根目录

    条件三:嵌入的网页不能再次跨域名跳转,且无法调用微信开放API,如打开相机、扫码、文件读写等接口

    条件四:使用腾讯云开发,托管静态资源建站,需要付费同时申请腾讯云域名账号,但可以跳过以上条件(无需校验条件二、三)

优势:交互可以通过web-view控件 传值回调,灵活,且可插拔灵活回调

4、开发小程序插件

开发小程序插件,小程序插件开发需要资质条件

    条件一:申请的小程序需要特殊的类目

    条件二: 小程序个人订阅号无开发插件资质

    条件三:插件内部管理http网络限制,需要额外开发接口申请网络签名,10分钟变更一次签名, 未来可能会被作为卡子,限制使用

缺陷:开发成本较大 优势: 将插件发布到插件市场,公开给第三方使用,可以作为服务商接入微信服务市场,可以发布不同类型的小程序、插件、模板。入驻微信服务商, 需对接微信开放平台。
实现控件web-view与H5交互

承载网页的容器。会自动铺满整个小程序页面,个人类型的小程序暂不支持使用。其中web-view控件文档

API说明

 

H5页面示例

html文件

    <body>
    <button  onclick="testPay()">支付</button>
    </body>
    <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

js文件

    <script>
    function testPay() {
        var mini=false;
        var appid = getUrlParam("appId")
        wx.miniProgram.getEnv(function(res){
        if (res.miniprogram){
               //发起小程序支付
               wx.miniProgram.navigateTo({
                    appId:'wx126ae2069f831xxx',
                    url: `/pages/other/h5?id=${appid}`});
                    mini=true;
             }
        });
    }
    // 获取加载url中携带的参数
    function getUrlParam(name) {
          var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
          var rrr = window.location.href.split('?')[1]; //因为用的hash模式,没办法用search属性,
          // var rrr = window.location.search; //history模式(路由没有#),可以用search属性
          var r = rrr.match(reg);
           if (r != null) return unescape(r[2]);
           return null;
     }
    ​
    </script>

小程序代码示例:

pages/web-view/index.wxml

<web-view src="{{h5Url}}" bindload="bindload" binderror="binderror"></web-view>

pages/web-view/index.js

    ​
      /**
       * 页面的初始数据
       */
      data: {
        payUrl: '/pages/pay/index',
        loginUrl: '/pages/login/index',
        appId: 'wxxxxxxxxxxx',
        h5Url: '',
      },
    ​
      onShow() {
        this.handleUrl();
        console.log(this.data.h5Url);
      },
    ​
      handleUrl () {
        // const appId = encodeURIComponent(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(this.data.appId)));
        const appId = encodeURIComponent(this.data.appId);
        const openId = encodeURIComponent(App.globalData.wxOpenId);
        const loginUrl = encodeURIComponent(this.data.loginUrl);
        const auth = encodeURIComponent(App.globalData.Authorization);
    // 拼接参数url, 传入H5页面
        this.setData({
          h5Url: `${App.globalData.zhH5Host}/h5/viotcard/manage/iotcard?appId=${appId}&openId=${openId}&payUrl=${payUrl}&loginUrl=${loginUrl}&auth=${auth}&v=${new Date().getTime().toString()}`
        });
      },



/pages/other/h5.js

      onl oad(options) {
        // 获取H5页面回传的参数
        console.log(options);
      },

最后重新强调一下前提:

    条件一:嵌入的页面链接必须是正规的网站域名(已备案)

    条件二:需要在小程序后台下载公钥文件,并上传到网站根目录

    条件三:嵌入的网页不能再次跨域名跳转,且无法调用微信开放API,如打开相机、扫码、文件读写等接口

 
https://blog.csdn.net/xy_peng/article/details/129752636

标签:内嵌,插件,方案,web,微信,程序,appId,页面
From: https://www.cnblogs.com/alexliuzw/p/17921453.html

相关文章

  • 企业IT运维管理的全面解决方案
        随着企业数字化转型的加速推进,IT系统的规模和复杂性不断增加,对运维管理的要求也越来越高。在这个背景下,监控易提供了一站式解决方案,可以帮助企业实现对IT、动环、智能物联网等基础设施的全面监控和管理,提高系统的可靠性、稳定性和安全性。同时,监控易还支持各系统间的运......
  • SAP ERP方案:助力超细纤维生产业实现高效运营
    随着科技进步和人们对健康生活的追求,超细纤维材料在各个领域中得到了广泛应用,如医疗、环境保护、新能源等。在超细纤维生产业中,高效的运营管理是保持竞争力和实现可持续发展的关键。为满足这一需求,SAPERP方案作为全球领先的企业资源计划软件之一,为超细纤维生产企业提供了一体化的......
  • 图片镜像程序(输入父目录与阈值)
    importosfromPILimportImagedefmirror_images_in_subfolders(parent_directory,x_threshold):"""遍历指定目录,找到包含图片数量少于指定阈值的子文件夹,并镜像这些图片,同时保存新名称以避免重复。:paramparent_directory:要搜索的根目录。:pa......
  • 前端 vue项目启动报错 spawn cmd ENOENT 的原因以及解决方案
    前端项目启动到一半的时候卡在跳转浏览器出现了这个问题 那么问题大概率就是你环境刚配置或者配置错了的问题,这个时候只需要找到我的电脑=>属性=>高级系统设置=>环境变量=>系统变量=>PATH环境=>双击进去=>添加环境变量=> 添加这俩个 C:\Windows\System......
  • CPU测试解决方案浅析
    一、CPU概述中央处理器(CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。应用处理器SoC是在中央处理器的基础上扩展音视频功能和专用接口的超大规模集成电路,是智能设备的“大脑”,在智能设备中起着运算及调用其他各功能构件的作用。CPU内部主要由运算器、......
  • 优测云服务平台总结Android开发常见风险及解决方案
    Android作为一个普及度、成熟度极高的平台,每天都有大量新APP涌现。开发一款Android应用,除了要有新颖的创意和高效的性能,保证安全性也是不容忽视的问题。俗话说打铁还需自身硬。接下来,我们会陆续与大家分享一些常见、不常见的代码风险问题,希望对您的Android开发工作有一定的......
  • 多元化集团公司业务管理数字化整体规划方案 P96
    本人在四大咨询机构从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货.该PPT共96页,由于篇幅有限,以下为部分资料,如需完整原版 方案,点击下方。本文来源于网络,侵权立删。随着企业规模的不断扩大,多元化......
  • 【低代码】低代码平台协同&敏捷场景下的并行开发解决方案探索
    低代码开发平台的出现,大大地提高的产品交付效率,但是在协同开发、敏捷迭代的场景下,也暴露出了一些问题。例如:多人同时对项目进行修改,相互影响甚至修改内容被互相覆盖;同一项目下多个需求同步开发,但需求上线日期不统一,无法拆分上线等等。本文将根据不同诉求,渐进式的讨论支......
  • Windows环境中使用dotnet-sdk运行打包后的.NET6.0 项目WebApi程序
     去官网下载Windows平台下的SDK并安装,与开发环境对应的版本【我的程序为.NET6.0】:https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-6.0.417-windows-x64-installer在开发好的程序中,右键添加Dockerfile支持,添加后修改配置,FROMmcr.microsoft.com/d......
  • gnuradio笔记[1]-内嵌python代码块
    摘要在GNURadio中简单使用内嵌python代码块实现输出内容到文件.超链接解决无法编辑代码块内代码原理简介GNURadio简介[https://wiki.gnuradio.org/index.php?title=What_Is_GNU_Radio]GNURadioisafree&open-sourcesoftwaredevelopmenttoolkitthatprovidessig......