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

前言

最近接到项目新需求,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://www.rhkb.cn/news/73169.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

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

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

Java基础语法练习题

2023.2.18刷题 1、java的4类流程控制语句 解析&#xff1a; java的4类流程控制语句 循环语句&#xff1a;while&#xff0c;for&#xff0c;do while 选择语句&#xff08;分支语句&#xff09;&#xff1a;if,switch 跳转语句&#xff1a;break,continue,break,label 异常处理…

java里在做TCP通讯的时候,一直报java.net.ConnectException: Connection timed out: connect的错误?

可能的你的ip地址发生了变化&#xff1a; 1.在cmd里面输入&#xff1a; ipconfig 2.找到ipv4地址 3.把客户端的Socket S new Socket("192.168.31.65",10002);的192.168.31.65改成现在的即可。

websock报错:The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for caller

网上看到了一些关于这个错误的产生场景 参考&#xff1a;场景&#xff1a;使用websocket遇到的一个小问题 The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid stat 我这里产生错误的场景是不同的&#xff0c;记录一下 背景 提供websocket服务的…

神经元模型简单制作方法,神经元的简单模型图解

神经元结构图示 &#xff08;1&#xff09;由图一可知&#xff0c;图一结构中涉及到3个神经元&#xff0c;含有2个突触&#xff0c;其中A是轴突&#xff08;神经纤维&#xff09;&#xff0c;B是树突&#xff0e; &#xff08;2&#xff09;图二中①是感受器、②是传入神经、③…

HH神经元模型

1、HH神经元的电路图。 电池表示特定离子的平衡电势&#xff0c;电阻器反映通道对特定离子的渗透性。 电容代表的就是细胞膜&#xff0c;存储电荷&#xff0c;起到了电容的作用。 在这个公式中IL代表的是泄露电流&#xff0c;图中它的电路中就是一个电阻R和一个电源的分路&…

神经网络输出层多个神经元

由于matlab升级&#xff0c;已经不能想以前一样直接在newff函数里面规定好隐含层多少个&#xff0c;或者几层&#xff0c;还可以有多个神经元的输出层。改版后需要输出层变成矩阵的形式&#xff0c;神经网络工具箱可以自动识别输出层有几个神经元。详细代码如何下&#xff1a; …

训练神经网络用什么显卡,cpu可以训练神经网络吗

gpu构架为什么更适合发展神经网络 因为神经网络这种大范围多任务的简单运算来说&#xff0c;正好符合GPU这种多核架构&#xff0c;比如你CPU20核心&#xff0c;同时处理20个任务。但是神经网络可能有20000个任务&#xff08;比喻&#xff09;。 但最近比较有代表性的GPU-Nvid…

单个神经元

先来看一下单个神经元网络模型&#xff1a; 其中 xi 表示输入&#xff0c;wi 和 b 表示参数。图中下方的公式是 1 函数的模型&#xff0c;嗯&#xff0c;就是一个线性模型。那么就这么一个简单的线性模型怎么仿真出人类神经元那么复杂的玩意儿呢&#xff1f;一个线性模型当然满…

人工神经元模型及常见激活函数

人工神经元模型 生物学上神经元通常由细胞体&#xff0c;细胞核&#xff0c;树突和轴突构成。 树突用来接收其他神经元传导过来的信号&#xff0c;一个神经元有多个树突&#xff1b; 细胞核是神经元中的核心模块&#xff0c;用来处理所有的传入信号&#xff1b; 轴突是输出信…

神经元是个啥子

空间平面的方程 这是一个似曾相识的方程&#x1f447; b ∑ n 1 N x n θ n i n 0 b\sum_{n1}^Nx_n\theta_n\bm{i}_n0 bn1∑N​xn​θn​in​0 没错&#xff0c;它描述了空间中的一个平面。其关于每一个坐标轴都有斜率 θ i \theta_i θi​&#xff0c;而 i n 为 这 个 轴…

神经网络的神经元个数,神经网络每层单元数

1、请问如何确定神经网络控制中网络层数和每层神经元个数 你使用的什么神经网络&#xff1f;如果是RBF神经网络&#xff0c;那么只有3层&#xff0c;输入层&#xff0c;隐含层和输出层。确定神经元个数的方法有K-means,ROLS等算法。 谷歌人工智能写作项目&#xff1a;小发猫 …

LSTM中神经元的个数

在初学RNN\LSTM时&#xff0c;经常将其与CNN进行类比&#xff0c;从而会思考LSTM中的神经元的个数。 然而循环神经网络与卷积神经网络差异很大&#xff0c;个人建议不进行类比&#xff0c;概念容易混淆。 其次来解释RNN\LSTM中神经元的个数。 这张在RNN中广为流传的神图&…

一个神经网络有多少个神经元?

引言 神经网络是机器学习的一个迷人的领域&#xff0c;但是它们有时很难优化和解释。事实上&#xff0c;它们有几个超参数。要优化的最常见的超参数是隐藏层中的神经元数量。让我们看看如何为我们的数据集找到一个神经网络的最佳神经元数量。 什么是神经网络&#xff1f; 神经网…

人体中数量最多的神经元,人体内有多少个神经元

人体的神经细胞到底有多少个&#xff1f; 谷歌人工智能写作项目&#xff1a;神经网络伪原创 人体内平均有多少神经元&#xff1f; 写作猫。 约含有140亿个神经元胞体虽然神经元形态与功能多种多样&#xff0c;但结构上大致都可分成胞体&#xff08;cellbody,orsoma&#xff…

人体的神经元有多少个,人体的神经元有多少支

人体内平均有多少神经元&#xff1f; 。 约含有140亿个神经元胞体虽然神经元形态与功能多种多样&#xff0c;但结构上大致都可分成胞体&#xff08;cellbody,orsoma&#xff09;和突起&#xff08;neurite&#xff09;两部分.突起又分树突&#xff08;dendrite&#xff09;和…

HICE第四天笔记 12月8日

第四天 12月8号 TCP和UDP 的区别 1&#xff0c;TCP是面向连接的协议&#xff0c;UDP是无连接的协议 2&#xff0c;TCP协议传输是可靠的&#xff0c;UDP协议传输“尽力而为” 3&#xff0c;TCP可以进行流控&#xff0c;UDP不行 4&#xff0c;TCP可以进行分段&#xff0c;UDP不行…

微信每日早安推送 Windows版

应诸多网友要求&#xff0c;这次上一个windows版的。 使用方法就是双击打开&#xff0c;立即就会推送一次。需要定时执行&#xff0c;可以使用windows的 任务计划程序 实现。帮大家百度好了 windows如何定时运行程序https://jingyan.baidu.com/article/7c6fb428334a49c1642c90e…

AutoGPT太火了,无需人类插手自主完成任务,GitHub2.7万星!

机器之心报道 编辑&#xff1a;杜伟、陈萍 OpenAI 的 Andrej Karpathy 都大力宣传&#xff0c;认为 AutoGPT 是 prompt 工程的下一个前沿。 近日&#xff0c;AI 界貌似出现了一种新的趋势&#xff1a;自主人工智能。 这不是空穴来风&#xff0c;最近一个名为 AutoGPT 的研究开始…