uniapp アプレットのネストされた H5 開発の概要

プロジェクトの要件は、uniapp アプレット プロジェクトに H5 ページをネストすることであり、H5 リターン アプレットは、通信のためにアプレットに値を渡す必要があります。

まあ、Baidu の検索は実際に uniapp によって提供される Web ビューを実現できます ( https://uniapp.dcloud.io/component/web-view.html#web-view経験により、関数を実行する前に公式 Web サイトを確認できることが証明されています)。 . 外部リンクと通信するには、多くの迂回路を使用します。

それを達成する方法は?

1. uniapp アプレット プロジェクトで Web ビュー ページを作成します。

プロジェクトコード 

<!-- 外链,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. H5 ページを作成するための html プロジェクトを作成する

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: Web ページがアプリケーションに Message をポストすると、特定の時間 (戻る、コンポーネントの破棄、共有) にメッセージをトリガーして受信します。H5はまだサポートされていません(直接使用できます)

その際、uni.naviageTo を使って小さなプログラムにジャンプしたのですが、小さなプログラムはすぐには印刷されず、ページにジャンプしてから印刷されるので、ルーティングパラメータを使用しました。(実際、naviageTo を redirectTo または switchTab に変更すると、後で学んだ web-view の値も取得できます)

おすすめ

転載: blog.csdn.net/gyl_sunshine/article/details/123430324