多种方案解决IOS下uni.share分享分包页面报错Error: Framework inner error

项目场景:

有个需求是用uni.share从app分享微信小程序,发现在苹果手机真机调试的时候 跳转的目标页面会白屏、页面样式错乱、一些组件不出现等问题。并且报错

Error: Framework inner error 

在这里插入图片描述


问题描述

uniapp开发在苹果手机下app分享微信小程序会出现白屏、样式错乱问题,并且配置均正确 排除配置问题。满足以下条件 均可100%复现

  1. ios手机必现、安卓手机正常
  2. 分享的小程序目标页面是小程序分包下的页面
  3. 目标页面引入的组件多,基础页面正常

app分享代码如下

uni.share({
            provider: 'weixin',
            type: 5,
            title: that.shareTitle,
            scene: 'WXSceneSession',
            imageUrl: that.shareImageUrl,
            miniProgram: {
              id: getBaseConfig().WE_CHAT_OFFER_ID, //要跳转小程序的原始ID
              type: getBaseConfig().WE_CHAT_OFFER_TYPE,//小程序版本类型 0正式版 1开发版 2体验版
              path:'/subpkg/safeguard/SafeguardDetailPage/subPage/firstCheckData',//跳转的目标页面
              webUrl: 'https://mujidigital.com/index',
            },
            success: (e) => {
              uni.showToast({
                title: '分享成功',
                icon: 'none',
              });
            },
            fail: (e) => {
              uni.showToast({
                title: '将通过微信打开,请下载微信',
                icon: 'none',
              });
            },
          });

解决方案:

一开始会认为是没有配置预加载分包配置 preloadRule导致的,然后配置了也是一样的有问题。

下面是我的项目结构图
在这里插入图片描述

  1. 首先问题出现之一就是这个z-paging组件是来自uni_modules下的,然后分包下页面直接引用主包的组件就会出现这个。解决方案 可以把分包使用的组件直接copy到分包下引用注释即可
  2. 在app下uni.share的path做操作,大概流程是先跳到主包下一个页面作为中转页面 然后做相关逻辑下发到具体分包页面 着重讲这一方案

app分享代码path逻辑调整


// 分享小程序地址
    sharePathUrl() {
 		//要带的参数
      const storageParams = {
        addressCityId: this.storageData.addressCityId,
        addressProvinceId: this.storageData.addressProvinceId,
        addressCity: this.storageData.addressCity,
        storageTypes: JSON.stringify(this.storageData.storageTypeList),
      };
      const obj = {
      //jumpUrlType做页面区分 这里约定是storageListPage
        storage: this.joinUrl('pages/homepage/homepage', { jumpUrlType: 'storageListPage', ...storageParams }),
      };
      return obj[this.showTitleType];
    },

uni.share({
            provider: 'weixin',
            type: 5,
            title: that.shareTitle,
            scene: 'WXSceneSession',
            imageUrl: that.shareImageUrl,
            miniProgram: {
              id: getBaseConfig().WE_CHAT_OFFER_ID, //要跳转小程序的原始ID
              type: getBaseConfig().WE_CHAT_OFFER_TYPE,
              path: that.sharePathUrl,
              webUrl: 'https://mujidigital.com/index',
            })

APP代码调整概括
其中我这有多个跳转页面,预期是自己设计一个映射表
app中通过jumpUrlType字段的值来映射小程序下的具体分包页面
pages/homepage/homepage是小程序下的中转页面路径
jumpUrlType字段的值来映射小程序下的具体分包页面
其余的是要带的业务参数

小程序分发代码调整

中转页的onLoad代码

  onLoad(option) {
	// app跳转分包页面小程序 特殊处理 分发操作
		  this.jumpPageTypeHandle(option);
  },
  methods:{
  	// 分发分享进入各个页面
		jumpPageTypeHandle(opt){
			console.log(opt,'optopt');
			if (!XEUtils.isEmpty(opt)) {
        const jumpUrlType = opt.jumpUrlType ? opt.jumpUrlType : 'topicDetail';
			  // topicDetail是详情页 storageListPage 是冷库列表 faDaDaApprove是电子签 safeguardProcessPage是牧集保障订单 firstCheckData是验证报告 topicCashActivity活动
			  const jumpUrlObj = {
			  	'topicDetail':'/subpkg/topic/topicDetail/index',
			  	'storageListPage':'/subpkg/storage/StorageListPage/index',
			  	'faDaDaApprove':'/subpkg/groupPage/faDaDaSign/approve',
			  	'safeguardProcessPage':'/subpkg/safeguard/SafeguardProcessPage/index',
			  	'firstCheckData':'/subpkg/safeguard/SafeguardDetailPage/subPage/firstCheckData',
			  	'topicCashActivity':'/subpkg/topicCashActivity/index',
			  }
			  const jumpUrl = jumpUrlObj[jumpUrlType];
        //一定要延迟跳转,需要等待分包加载完成 不然一样失效  延迟时间差不多1s
			  setTimeout(()=>{
			  	navigateTo(jumpUrl,opt);
			  }, 1000);
      }
		},
  }

小程序代码调整概括
在onload拿到jumpUrlType 字段 去对照要跳转的分包页面路劲
然后带上相关参数做延迟跳转``延迟跳转``延迟跳转

原因分析

目前了解到的是设备差异性,因为安卓手机能够直接跳分包不会有问题,苹果手机分享的分包页面就会出现,核心本质的原因就是分包页面不能引入主包组件 不然会出现各种各样的问题

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值