微信小程序web-view嵌入uni-app H5页面,通过H5页面传参给小程序进行转发分享页面,并通过点击转发出来的卡片,定向打开对应H5路径

第一步:uni-app H5页面触发传参→微信小程序

onLoad(d) {
    
    
	this.postMessage();
},
methods: {
    
    
	postMessage() {
    
    
		wx.miniProgram.postMessage({
    
    
			data: {
    
    
				title: "微信小程序转发分享自定义的标题",//这个是要传给微信小程序的标题
				path: `?a=1&b=2&c=3`,//这个是要传给微信小程序的参数
			}
		})
	},
}

第二步:微信小程序代码,分享页面传参→H5页面

index.wxml

<web-view src="{
    
    {src}}" bindmessage="bindmessage" />

index.js

Page({
    
    
    data: {
    
    
        src: "https://www.shuzhiqiang.com/#/",//注意后面有"/#/"
        shareData: {
    
    },
    },
    onLoad(d) {
    
    
        if (d && Object.keys(d).length) {
    
    
            let p = Object.keys(d).reduce((p, k, i) => p + `${
      
      i === 0 ? '?' : '&'}${
      
      k}=${
      
      d[k]}`, '');
            this.setData({
    
     src: this.data.src + p });// 通过web-view的src路径传参,从微信小程序传参给H5
        }
    },
    // 当点击小程序右上角胶囊“…”的时候接收H5传过来的值
    bindmessage(d) {
    
    
        if (d && d.detail && d.detail.data) {
    
    
            //console.log('H5传过来的最新信息', JSON.stringify(d.detail.data.slice(-1)[0], null, 2));
            this.setData({
    
     shareData: d.detail.data.slice(-1)[0] });//因为bindmessage推送过来的数据是push的形式,所以最新的数据是在最后
        }
    },   
    // 注意:只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮
    onShareAppMessage() {
    
    
        return {
    
    
            // 用Promise延时一下,避免bindmessage还未执行完毕,就唤起转发
            promise: new Promise(resolve => {
    
    
                setTimeout(() => {
    
    
                    resolve({
    
    
                        title: this.data.shareData.title,
                        path: `/pages/index/index${
      
      this.data.shareData.path}`,//这个path是来自H5页面的传参路径
                    })
                }, 100)
            })
        }
    }
});
 
wx.showShareMenu({
    
    
    withShareTicket: true,
    menus: ['shareAppMessage', 'shareTimeline']// shareAppMessage表示“发送给朋友”按钮,shareTimeline表示“分享到朋友圈”按钮 
})

第三步:打开分享的微信小程序卡片,uni-app H5页面获取参数

在H5项目的App.vue页面获取参数实现自动跳转到对应页面,包括携带的参数值

import wx from "weixin-js-sdk"; //npm install --save weixin-js-sdk 
 
export default {
    
    		
	onLaunch() {
    
    
		// 监听各种跳转
		['navigateTo', 'redirectTo', 'reLaunch', 'switchTab', 'navigateBack', ].forEach(v => {
    
    
			uni.addInterceptor(v, {
    
    
				success: e => this.watchRouter(e),
			})
		});
		this.watchRouter();
	},
	onShow(d) {
    
    
		d = d.query;
		if (d && Object.keys(d).length) {
    
    
			let path = d.path;
			delete d.path;
			let p = Object.keys(d).reduce((p, k, i) => p + `${
      
      i === 0 ? '?' : '&'}${
      
      k}=${
      
      d[k]}`, '');
			let url = `${
      
      path}${
      
      p}`;
			// console.log('跳转路径&参数', url)
			uni.navigateTo({
    
    url});
		}
	},
	onHide() {
    
    },
	methods: {
    
    
		watchRouter(d) {
    
    
			wx.miniProgram.postMessage({
    
    
				data: {
    
    
					title: `自定义标题!`,
					path: ``,
				}
			})
		},
	},
 
}

猜你喜欢

转载自blog.csdn.net/st646889325/article/details/133738423
今日推荐