H5页面内嵌到微信小程序和APP,做分享操作

article/2025/11/9 16:18:49

前言

最近接到项目新需求,H5项目需要内嵌到微信小程序和APP里,然后将H5页面分享出去,被分享的人可以点击消息跳转到H5页面。H5页面不难,难的是要与微信小程序和APP进行交互,因为以前也没有接触过,所以这里卡的时间有点长。现分享出来

小程序内嵌H5页面

介绍

这里小编使用的是 uinapp 写的H5项目!!!
H5页面放入小程序中,需要使用小程序的一个组件 web-view
微信官方文档
官方文档中有详细介绍,H5页面主要需要的API为 相关接口1在这里插入图片描述

准备工作

其中 wx.miniProgram.postMessage 这个API就是H5做分享功能的主要的接口,在使用它之前还要下载 JSSDK ,这个 JSSDK.js文件 在官方文档中可以下载,然后放到你的项目中引入使用。
还可以使用 npm 下载: 用 npm install weixin-js-sdknpm install weixin-jsapi

正式开发

// 判断是否是微信环境
export function isWx() {return /MicroMessenger/i.test(window.navigator.userAgent)
}

引入

使用 npm 下载的,在项目的 main.js 文件中引入 jssdk ,这样就能在项目中全局使用:
在这里插入图片描述
官方文档中下载的,在需要使用 jssdk 的页面中引入使用:
在这里插入图片描述

页面使用

单页面引入jssdk的使用:

if(this.flagWeChat){ //判断是否为微信环境//提前发送消息给小程序,初始化分享参数let infoList = {type:"share",//H5消息的消息类型messageData:{shareTitle:"@你....!",//分享标题shareImageUrl: "",//分享截图(小程序可以截当前分享页面图,当然也可以使用传过去的图)sharePathUrl:"/pages/web-view/main",//分享小程序页面(如需要参数则此地址需要拼接,注意这里的参数有长度限制)}};wx.miniProgram.postMessage({data:infoList});//必须使用 {data:infoList} 格式
}else{console.log('分享时不在小程序里')
}
注意:这里的 infoList 里面所需参数名称皆为小程序那边的开发人员所规定的

main.js 全局引入的使用:

if(this.flagWeChat){ //判断是否为微信环境//提前发送消息给小程序,初始化分享参数let infoList = {type:"share",//H5消息的消息类型messageData:{shareTitle:"@你.....",//分享标题shareImageUrl: "",//分享截图sharePathUrl:"/pages/web-view/main", //分享小程序页面}};this.wx.miniProgram.postMessage({data:infoList})
}else{console.log('分享时不在小程序里')
}
注意:h5能做的就是发送这一条消息给小程序,具体的分享还是要通过小程序头部自带的3个点

ps:这里的分享主要是小程序分享给微信好友的分享,发送给微信好友时会以消息卡片的形式分享出去。

APP内嵌H5页面

介绍

在 APP 里内嵌H5页面,h5页面需要使用app定义的方法,首先需要app开发者把h5需要使用的方法公开到 window 中,这样h5才能使用。有的是需要引入js文件或是其他东西,这需要与app开发者协商。

正式开发

// 判断当前运行环境 ios,安卓
export function myProgramEnv() {if(/Android/i.test(window.navigator.userAgent)) {return 'android'}if(/ipad|iphone/i.test(window.navigator.userAgent)) {return 'ios'}
}

页面使用

let shareInfo = {shareScene:"friends", //分享场景,friends代表微信好友shareType:"miniProgram",//消息类型,miniProgram代表分享小程序title:"@你.....",//分享标题desc:"....",//分享描述imageData: "",//图片地址link:"",//分享小程序页面,此地址需要拼接,如:/pages/web-view/main?webViewData={linkUrl="xxxxx",isLoginNeeded=true,navigationTitle="xxxxxx"},其中 "linkUrl":"xxxxxx",//分享H5链接;"isLoginNeeded":false,//是否需要账号信息"navigationTitle","xxxx",目标页面标题,可不传webPageUrl:""//网页地址,值与linkUrl值相同,主要用于兼容
}
// wechatShare是app提供的方法,我们只要在需要的地方调用就好
if(this.flagSystemAPP == "android"){try {						// 安卓//MoveCallNative 为安卓开发人员规定的名称,如若未特别规定则使用 window.android......window.MoveCallNative.wechatShare(JSON.stringify(shareInfo))} catch (e) {console.log('android分享错误--',e)}
}else if(this.flagSystemAPP == "ios"){ //iostry {					// ioswindow.webkit.messageHandlers.wechatShare.postMessage(JSON.stringify(shareInfo)						);} catch (e) {console.log('ios分享错误--',e)}
}
注意:这里的 shareInfo 里所需参数名称皆为APP开发人员所规定传参数时必须是字符串 JSON.stringify(shareInfo)

ps:这个分享也是分享给微信好友的分享,分享给好友时是以链接的形式分享的

H5页面

介绍

分享出去的链接或卡片最终还是会回到H5页面,所以在H5页面需要接受参数,做出相应的操作

正式开发

在 App.vue 页面接收参数,分割参数和目标页面路径

<script>export default {globalData:{  // 存放全局数据familyDetail: {}, // 当前登录人的家庭数据initPage: null, // 第一次进入页面的页面pathmbrid: null, // 去获取用户信息的参数 },/* 程序初始化逻辑 1、获取用户初始化进入的相关数据,包括mid(用户身份标识),存储到全局变量2、判断本地有没有token,有就去对应的页面,没有则拦截到授权页面3、拦截前,保存第一次进入的页面地址,用于获取token后,去到该页面*/onLaunch: function(option) {console.log('App.vue初始化数据option---', option)		if(window.location.search){ //获取链接里的参数let parameter = window.location.search.split('mbrid=')[1].split('#')[0];console.log('App.vue初始化数据mbrid---', parameter);getApp().globalData.mbrid = parameter;  // 存储授权数据}else{console.log('路径未带参数---')}getApp().globalData.initPage = window.location.hash.substr(1); //获取链接里的页面路径uni.reLaunch({url: '/pages/auth/auth'}); //跳转到授权页面return},onShow: function() {},onHide: function() {},methods: {}}
</script>

授权页面:授权和跳转到目标页面

<script>/* auth页面,只做授权使用,去获取token*/import { http_getWeChatLogin } from '@/common/api/index.js'import { cache_set_token } from 'common/utils/cache.js'import { ENV } from 'common/utils/constant.js'export default{data() {return {}},onLoad(option) {console.log('auth.vue初始数据:getApp().globalData---:',getApp().globalData)if(['AY_DEV'].includes(ENV)) { //判断是否为正式环境this.handleGetToken('1');} else {this.handleGetToken(getApp().globalData.mbrid);//app.vue里截获的参数}},methods:{async handleGetToken(mbrid) {if(!mbrid) {console.log('mbrid没有----')uni.showToast({title: '非法闯入',icon: 'none'})return}const { code, data, msg } = await http_getWeChatLogin({ mbrId: mbrid }); //请求接口获取tokeif(code == 200) {const { accessToken } = datacache_set_token(accessToken) //存储tokegetApp().globalData.familyDetail = data; //存储家庭信息if(getApp().globalData.initPage.indexOf('pages/auth/auth') > -1) { //判断是否为开发打开页面uni.reLaunch({url: '/pages/client_side/activity/activity' }); //跳转到首页} else {uni.reLaunch({url: getApp().globalData.initPage }); //跳转到app.vue里截获的路径}} else {uni.showToast({title: msg,icon: 'none'})}} }}
</script>

至此,整个分享过程完结


http://chatgpt.dhexx.cn/article/bNwXNlYQ.shtml

相关文章

H5及H5页面是什么意思?如何制作H5页面?

H5是HTML5的简称。HTML5是HTML最新的修订版本&#xff0c;是一种超文本标记语言。H5有两大特点&#xff1a;首先&#xff0c;强化了 Web 网页的表现性能。其次&#xff0c;追加了本地数据库等 Web 应用的功能。 H5页面就是利用html5制作出来的页面&#xff0c;尤其在微信中发展…

拿走!H5版本ChatGPT开源等你

近些日子忙里偷闲的研究chatGPT&#xff0c;也小弄了一个公众号版本&#xff0c;一个H5版本的&#xff0c;现在H5版本的也就是开放给大家体验的版本&#xff0c;还不知道的伙伴可以关注#公众号&#xff1a;李连活&#xff0c;回复“888”领取体验&#xff0c;和AI畅快聊天问答。…

不懂技术,如何轻松制作微信H5页面?

H5这个由HTML5简化而来的词汇&#xff0c;正通过微信广泛传播。H5是集文字、图片、音乐、视频、链接等多种形式的展示页面&#xff0c;丰富的控件、灵活的动画特效、强大的交互、实现信息传播&#xff0c;非常适合通过手机的展示、分享。也因其灵活性高、开发成本低、制作周期短…

关于浏览器加载不出图片的问题

刚刚才解决 幸好有截图&#xff0c;不然口说无凭了 分割线 我试过上网搜过问题&#xff0c;但是好像都没什么用 接连好多次这样加载图片加载不出来&#xff0c;我就开始想怎么解决了 今天灵机一动&#xff0c;是不是图片的缓存这些太多&#xff0c;导致浏览器加载不出来呢。…

解决loadrunner 12 录制时打不开Chrome谷歌浏览器,显示正在加载中的问题

解决loadrunner 12 录制时打不开Chrome谷歌浏览器&#xff0c;显示正在加载中的问题 刚开始学习loadrunner&#xff0c;安装了loadrunner 12&#xff0c;录制时浏览器一直显示正在加载… 看到网上有人说录制的时候打开Fiddler就可以了&#xff0c;试了下确实可以。但如果录制的…

chrome插件与本地exe程序之间的信息交互

一、概述 如果想要通过本地exe程序与chrome插件之间的通信&#xff0c;我们需要利用到NativeMessage。 具体环境与实现步骤见下文。 二、环境 1. window10操作系统 2. chrome浏览器 3. pycharm 三、实现步骤 1. 自己编写一个chrome插件 chrome插件的开发详细步骤与文件结构可…

win10更新后 chrome内核浏览器总是打开网页一直加载 甚至打不开 解决方法

升级win10之后如果出现chrome内核的浏览器网页总是打不开 打开很慢 而ie和edge是可以正常访问的 用这个方法可以 我弄了几天终于 搞好了 我直接转载过来了 近期&#xff0c;工程师收到大量反馈360浏览器&#xff0c;极速模式无法打开网页&#xff0c;兼容模式无此问题。 IE浏览…

客户端工具登录异常问题分析

1、首先判断是用户名密码是否错了&#xff1b; 2、在用户名密码正确的前提下&#xff0c;需要查看oninit程序的权限是否正确。如果权限异常&#xff0c;也会存在上述问题的 1、通常可以理解成informix弱口令的问题&#xff0c;调整弱口令之后&#xff0c;等几分钟即可

(十)服务端异常退出

&#xff08;十&#xff09;服务端异常退出 之前讲解了客户端异常退出的代码&#xff0c;但是服务端也是会异常退出的。如果服务端异常退出&#xff0c;它会将所有在线的客户的状态都设置为offline。即&#xff0c;让所有用户都下线。 异常退出一般是CTRL C时&#xff0c;我们…

统一异常处理 GlobalExceptionHandler

平时经常在代码里面 try {... } catch (Exception e) {... }这样子代码繁琐而且也不好看。特别是还有一些需要自己new一个map封装业务的异常信息&#xff0c;是在是难看。所以就需要引出全局异常。经过一些封装&#xff0c;就可以实现这样的效果了。 还是看代码吧&#xff01…

【异常】使用ApiFox客户端提示 “ 加载出错,请检查网络是否异常”,但是Web端是正常访问的

一、报错内容 提示内容类似于如下&#xff1a;连接Apifox服务器出错&#xff0c;请检查网络是否异常 二、报错说明 可能是因为APIFOX升级版本了&#xff0c;导致的问题&#xff0c;目前没有找到根因 三、报错解决 3.1 解决方案 1 使用Chrome的插件——Apifox Agent&#…

(七)客户端异常退出事件处理

如果客户端异常退出了&#xff0c;我们会从服务端记录用户连接的 _connMap 表中找到改用户&#xff0c;如果它断连了就从此表中删除&#xff0c;并设置其状态为 offline。 因为记录用户连接情况的表是可能被多个线程操作的&#xff0c;所以访问表的操作都要使用互斥锁进行保护。…

彻底解决aapt2异常

随时随地阅读更多技术实战干货&#xff0c;获取项目源码、学习资料&#xff0c;请关注源代码社区公众号(ydmsq666) from&#xff1a;https://blog.csdn.net/qq_34879948/article/details/80313690 升级android studio 3.0后&#xff0c;在创建新项目时会报一个异常&#xff0c…

客户端异常的处理

在我们的项目中&#xff0c;我们一般只会捕获我们自己能够想到的异常&#xff0c;但是这样就会导致一些无法捕捉到的异常被漏出去&#xff0c;因为我们不能确定它们会在什么地方出现&#xff0c;例如像NullPointerException&#xff0c;ClassCastException&#xff0c;IndexOut…

2021年6月大学英语六级作文

目录 1.第一套 2.第二套 3.第三套 1.第一套 中国高等教育∶Directions∶For this part&#xff0c; you are allowed 30 mimites to write an essay based on the chart below.You should start your essay with a brief description of the chart and comment on Chinas ac…

【人工智能】大模型平台新贵——文心千帆

个人主页&#xff1a;【&#x1f60a;个人主页】 &#x1f31e;热爱编程&#xff0c;热爱生活&#x1f31e; 文章目录 前言大模型平台文心千帆发布会推理能力模型微调 作用 前言 在不久的之前我们曾讨论过在ChatGPT爆火的大环境下&#xff0c;百度推出的“中国版ChatGPT”—文…

你如何看待百度的文心一言ERNIE Bot?心有所系,言出必行。

心有所系&#xff0c;言出必行。 排队中。。。 文心一言 百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动&#xff0c;回答问题&#xff0c;协助创作&#xff0c;高效便捷地帮助人们获取信息、知识和灵感。 文心一言&#x…

Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching 论文精读

Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching 论文链接&#xff1a;[2305.13310] Matcher: Segment Anything with One Shot Using All-Purpose Feature Matching (arxiv.org) 代码链接&#xff1a;aim-uofa/Matcher: Matcher: Segment Anyt…

【问题记录】关于百度网盘客户端打不开

问题描述 双击桌面图标没有任何反应&#xff0c;用管理员模式也是没什么反应。 问题追踪 按ctrlshiftesc打开任务管理器&#xff0c;查看到百度网盘的一个升级程序在运行中&#xff0c;注意升级程序的网络一栏&#xff0c;表明该进程在下载东西&#xff0c;但是速度很慢 在…

百度网盘的最新插件(懂得都懂)

下面先给大家介绍一下油猴插件。 这个插件为什么叫油猴&#xff1f; 现在我们经常提到的油猴插件&#xff0c;常指Tampermonkey&#xff0c;但Tampermonkey翻译过来是叫篡改猴&#xff0c;为什么会叫油猴呢&#xff1f;原因是因为另一个插件Greasemonkey&#xff0c;它翻译过…