uniapp 小程序嵌套H5开发总结

news2025/1/21 15:28:26

项目需求是在uniapp小程序项目中嵌套H5页面,H5返回小程序需要传值给小程序进行通信。

好,百度一查确实可以实现 用的uniapp提供的web-view(https://uniapp.dcloud.io/component/web-view.html#web-view经验证实,做功能之前先看官网, 能少走很多弯路 )就可以与外部链接通信。

那如何实现呢?

1.在uniapp小程序项目创建web-view页面

项目代码 

<!-- 外链,webview -->
<template>
	<view><web-view  :src="webviewPath" @message="message"></web-view></view>
</template>

<script>
export default {
	data() {
		return {
			webviewPath: '',
			hackReset:false
		};
	},
	mounted(){
	},
	onLoad() {
		// console.log("来到自定义页面")
		console.log(this.$Route.query.webviewPath,"地址")
		this.webviewPath = this.$Route.query.webviewPath;
	},
	methods:{
		message(event) {
			console.log('接收从小程序传过来的id',event.detail.data)
		}
	}
};
</script>

<style></style>

2.创建一个html项目写H5页面

H5首页代码 

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <!-- <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> -->
	<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	<style type="text/css">
	*{
		margin: 0px;
		padding: 0px;
	}
	.flex-div{
		display: flex;
		flex-wrap: wrap;
	}
		
	</style>
</head>
<link rel="stylesheet" type="text/css" href="./css/reset.css">
<body>
	<div id="app" class="good-wrap" style="max-width: 100%;">
		<div class="top-img" style="width: 100%;">
			<img src="img/top.png" style="width: 100%;" >
		</div>
		<!-- 限量优惠 -->
		<img src="img/img1.png" style="width: 100%;">
		<!-- 优惠券领取 -->
		<div class="mk1-1 flex-div" >
			<img class="mk1img" :data-id="item.id"  @click="goCoupon(item.id)" v-for="(item,index) in goodsdata.xlyh" :src="item.imgUrl" style="width: 100%;">
		</div>
		<div class="mk1-2 flex-div" >
			<img class="mk1img" :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.xlyh" :src="item.imgUrl" style="width: 100%;">
		</div>
		<!-- 年份茅台 -->
		<img src="img/img5.png" style="width: 100%;">
		<div class="mk2 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.nfmt" :src="item.imgUrl" style="width: 50%;">
		</div>
		<!-- 颜色茅台 -->
		<img src="img/img12.png" style="width: 100%;">
		<div class="mk3 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.ysmt" :src="item.imgUrl" style="width: 50%;">
		</div>
		<!-- 整箱囤购 -->
		<img src="img/img18.png" style="width: 100%;">
		<div class="mk4-1 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.zxtg1" :src="item.imgUrl" style="width: 100%;">
		</div>
		<div class="mk4-2 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.zxtg2" :src="item.imgUrl" style="width: 50%;">
		</div>
		<!-- 精品陈亮 -->
		<img src="img/img26.png" style="width: 100%;">
		<div class="mk5-1 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.jpcl1" :src="item.imgUrl" style="width: 50%;">
		</div>
		<div class="mk5-2 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.jpcl2" :src="item.imgUrl" style="width: 100%;">
		</div>
		<div class="mk5-3 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.jpcl3" :src="item.imgUrl" style="width: 50%;">
		</div>
		<!-- 更多推荐 -->
		<img src="img/img36.png" style="width: 100%;">
		<div class="mk6-1 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.gdtj1" :src="item.imgUrl" style="width: 50%;">
		</div>
		<div class="mk6-2 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.gdtj2" :src="item.imgUrl" style="width: 100%;">
		</div>
		<div class="mk6-3 flex-div">
			<img  :data-id="item.id"  @click="goX(item.id)" v-for="(item,index) in goodsdata.gdtj3" :src="item.imgUrl" style="width: 50%;">
		</div>
		<img src="img/img48.png" style="width: 100%;">
		
		
		
	</div>
	
	<!-- 微信 JS-SDK  -->
	<script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>  
    <!-- uni 的 SDK -->
    <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
	<script type="text/javascript" src="data1.json"></script> 
    <script type="text/javascript">
    console.log(goodsdata,"shuju")   
    var app = new Vue({
                  el: '#app',
                  data: {
                      // wxdata: "abc",
					  goodsdata:[]
                  },
				 
                  mounted() {
					  console.log("goodsdata",goodsdata)
					  this.goodsdata=goodsdata;
                      this.$nextTick(() => {
                          document.addEventListener('UniAppJSBridgeReady', function() {
                              uni.getEnv(function(res) {
                                  console.log('当前环境:' + JSON.stringify(res));
                              });  
                          });
                      })
  
                  },
                  created() {
                      // this.wxdata = this.getQueryString('wxdata') || 'abc'
                      // console.log(this.wxdata)
                  },
                  methods: {
					  // 跳转商品详情页面
                      goX(id) {
						  console.log(id,"传给小程序的id")
                          uni.navigateTo({
                              url: '/pages/goods/detail?id='+id
                          });
                      },
					  // 跳转领取优惠卷页面
					  goCoupon(id){
						      uni.navigateTo({
						          url: '/pages/app/coupon/detail?id='+id
						      });  
					  }
                     /* 接收小程序传参的方法 */
                      getQueryString: function(name) {
                          var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
                          var r = window.location.search.substr(1).match(reg);
                          if (r != null) {
                              return decodeURIComponent(r[2]);
                          }
                          return null;
                      }
                  }
              })  
    </script>
</body>
</html>

几个关键点

1.引入JS-SDK uniSDK 必须引入,顺序不能错

 2.调用uniapp api之前  先加载一段代码

 3.跳转传值

小程序在onload(options)里接收 

这里其实官网推荐@message传值  但是

@message: 网页向应用 postMessage 时,会在特定时机(后退、组件销毁、分享)触发并收到消息。 H5 暂不支持(可以直接使用)

我做的时候用的uni.naviageTo跳转会小程序  小程序端并不会立即打印  而是在跳转一个页面才打印,所以我才用了路由传参 。(其实把naviageTo变成redirectTo或者switchTab 也可以在web-view拿到传值,这也是后来才知晓的  )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一天时间迅速准备前端面试|JavaScript——异步进阶

&#x1f308;本系列文章是博主精心整理的面试热点问题&#xff0c;吸收了大量的技术博客与面试文章&#xff0c;总结多年的面试经历&#xff0c;带你快速建立前端面试知识体系。抓住每一场面试的机会&#xff0c;知己知彼才能百战百胜&#xff01; 上期回顾 JS基础–异步 本系…

【中秋快乐】如何用three.js实现我的太空遐想3D网页

目录 创作背景 功能分解 创建3d地球 创建3d月球 创建3d小火箭

解决element-ui动态加载级联选择器默认选中问题(Cascader)

前言 最近在开发任务中碰到需要在新增和修改时使用动态加载级联选择器&#xff0c;但是当在修改时设置默认选中项&#xff0c;出现了后端数据返回较慢&#xff0c;导致无法选中和级联框选中了但input框不显示的问题&#xff0c;网上找到的方法也不是很有效&#xff0c;还得使用…

Vue - v-for 循环渲染多个 “重复“ 子组件(仅 ref 不同,this.$refs.xx 使用时依然能准确找到子组件)将子组件 ref 设为动态,这样每个子组件都是 “独立“ 的!详细教程

前言 本教程更多版本:uni-app | 微信小程序 我们会通过给组件绑定 ref 值,然后通过 this.$refs.xx 来获取这个组件上的方法和变量。 如果 在 v-for 中循环渲染组件(绑定固定 ref),那么这个 ref 就会 “一摸一样”,导致根本无法找到(this.$refs.xx 谁?), 要解决这个问…

【前端】vue模板语法知识了解一下,是不是只知道用element-ui组件?

vue写在前面Vue模板语法文本原始HTML属性开源Vue模板和主题框架集合BootstrapVueelement-ui最后总结写在前面 上一篇总结了在实操过程中如果遇到了nodejs版本的问题&#xff0c;我们该如何去解决的&#xff0c;还有就是总结了vue2和vue3生命周期的区别&#xff0c;如果感兴趣的…

【JavaScript】JS实用案例分享:动态生成分页组件 | 通过按键实现移动控制

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 &#x1f5a5;️ NodeJS专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;源创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&am…

React 路由v6 - 超全详解

React router v6 路由 已经习惯了 v5 版本的路由 &#xff0c;那么 v6 版本的路由 该怎么应用呢&#xff1f; 文章目录React router v6 路由Ⅰ、路由 v6 (两种形式)Ⅱ、 动态路由Ⅲ、路由重定向Ⅳ、路由跳转 (两种形式)Ⅴ、路由懒加载Ⅰ、路由 v6 (两种形式) 方案一 &#xff…

JS原生——编写简易计算器

一个非常适合新手练习的小案例&#xff01;&#xff01;&#xff01; 使用JS的ES5语法HTMLCSS及企业级代码规范&#xff0c;方便后续良好的代码习惯养成&#xff01;&#xff01;&#xff01; 先来看一下样式吧&#xff01;&#xff01;&#xff01;&#xff08;后附代码&…

组件通信的6种方式

什么是组件通信 vue组件中关系说明: 如上图所示, A与B、A与C、B与D、C与E组件之间是父子关系&#xff1b; B与C之间是兄弟关系&#xff1b;A与D、A与E之间是隔代关系&#xff1b; D与E是堂兄关系&#xff08;非直系亲属&#xff09; 针对以上关系我们归类为&#xff1a; 父…

前端跨域解决方案

文章目录1.同源政策2.跨域解决方案2.1 CORS普通跨域请求&#xff1a;只需服务端设置Access-Control-Allow-Origin即可携带cookie跨域请求&#xff1a;前后端都需设置2.2 JSONP原理缺点数据格式jsonp跨域实现2.3 postMessage跨域2.4 WebSocket属性&#xff1a;事件&#xff1a;使…

vue3+vite:本地代理,配置proxy

一、项目&#xff1a;uniappvue3vitets 二、配置文件在vite.config.ts proxy: {/snow: { // 匹配请求路径&#xff0c;localhost:3000/snowtarget: https://www.snow.com/, // 代理的目标地址changeOrigin: true, // 开发模式&#xff0c;默认的origin是真实的 origin:localh…

压缩gltf/glb模型踩坑与解决 three.js DRACOLoader

前言 使用前端three.js加载3d模型过程中&#xff0c;往往会出现模型大小过大导致前端加载时间过长&#xff0c;降低用户体验。 本文所记录的是笔者在使用gltf-pipeline压缩3d模型中踩坑DRACOLoader与解决的一个过程。 所采用的three库版本为 ^0.138.2 解决方案与介绍 通过g…

31.JavaScript数组进阶,一网打尽数组操作函数slice、filter、map、reduce、some、every、find、splice

文章目录数组进阶元素删除&#xff08;对象方式&#xff09;splice()删除一个元素删除多个元素截断数组元素替换元素插入返回值负索引slice()concat()forEach()indexOf、lastIndexOf、includesfind、findIndexfiltermapsortreversestr.split()和arr.join()reduce、reduceRightA…

vue在html标签 {{}} 中调用函数的方法

目录 一、问题 1&#xff09;实现上述需求&#xff1a;有两种方式 2&#xff09;两种实现方式对比&#xff1a; 二、解决方法&#xff08;在html渲染时调用函数&#xff09; 三、总结 注&#xff1a;不想仔细看的&#xff0c;可以直接看有颜色的及代码哟 一、问题 1.在ht…

关于 HbuilderX 运行项目到手机,搜索不到手机解决

注意 本文内&#xff0c;我的 HbuilderX 安装目录都是在 D:\app 目录下&#xff0c;所有关于本文的操作文件都是在 HbuilderX 安装包内。 第一步&#xff1a;打开环境变量&#xff0c;找到系统变量&#xff0c;然后点击编辑。 第二部&#xff1a;配置 HbuilderX 的 adbs 目录…

JS中的位运算

目录 JS中的位运算 JS中的与运算 JS中的或运算 JS中的否&#xff08;非&#xff09;运算 计算机中负数的存储方式 JS中的异或运算 JS中位运算的应用场景 位的叠加&#xff08;开关&#xff09; JS中的位移运算 左位移 右位移 全右位移 首先了解一下什么是位运算 位…

Vite 配置篇:日常开发掌握这些配置就够了!

不知道有没有这样的兄弟&#xff0c;学习 Vite 的时候&#xff0c;官网上各种配置看的是眼花缭乱。不知道哪些需要掌握&#xff0c;哪些只用简单了解一下。为了提高大家的效率&#xff0c;我把项目中常用的配置梳理了一下分享给大家&#xff0c;希望对你上手 Vite 有所帮助。话…

若依框架前端切换TagView时刷新问题

若依框架点击顶部tag切换时&#xff0c;永远都是刷新的。刷新问题两种情况&#xff1a;普通view切换时刷新及iFrame切换刷新 一、普通view切换时刷新 原因是view的name与在菜单填写的大小写不一致&#xff0c;按若依框架规则&#xff0c;路由地址必须写为 camel 驼峰命名形式&…

前端:Tomcat服务器部署Web项目

文章目录1.1 C/S架构1.2 B/S架构2.1 服务器2.2 常见服务器3.1 Tomcat安装3.2 Tomcat使用3.3 Tomcat配置3.4 Tomcat项目部署4.1 Servlet技术4.2 Servlet配置4.3 配置测试4.4 Servlet部署5.1 IDEA部署1.1 C/S架构 Client / Server客户端/服务器 客户端作为独立程序 图形效果较好…

【面试题】面试官: Vue如何实现权限管理?

我正在参加「掘金启航计划」 一、权限管理 权限管理就是让不同的用户只能访问自己权限内的资源&#xff0c;有以下几种 路由权限&#xff0c;用户登录后只能看到自己权限内的导航菜单&#xff0c;且只能访问自己权限内的路由地址视图权限&#xff0c;用户只能看到自己权限内…