微信小程序嵌入 H5 页面(webview)基本用法和父子传参数说明

背景:

最近实现一个功能需要在小程序嵌入其它系统内部的一个页面(用vue写的H5页面),但小程序是无法使用iframe的,所以最终选择小程序官方的webview实现,本文对基本用法和父子传参进行说明。所以下面将说明:

  1. 小程序官网配置业务域名
  2. 标签的用法。
  3. 父子传参数。
  4. H5 跳转回小程序。

一、 小程序官网配置业务域名

小程序官方要求配置,如果不配置在趁机上会无法打开,但在微信开发者工具正常
步骤: 在微信小程序后台,开发->开发管理->开发设置->业务域名 这里添加需要嵌入到小程序里面 H5 页面的合法域名(最多200个);

二、标签的用法

web-view 承载网页的容器。会自动铺满整个小程序页面,不能像iframe那样能设置某个区域

直接使用标签即可
 <web-view src="xxxxxxxxxx"></web-view>

在这里插入图片描述

三、父子传参数

父传子(本地系统传到被嵌入的H5页面):
  //这是小程序页面
 <web-view src="{{webUrl}}"/>


//这是H5页面
created() { 
    // H5获取token const wxobj = {} 
    window.location.href.replace(/([^?&=]+)=([^&]+)/g, (_, k, v) => (wxobj[k] = v)) 
    if ( wxobj.token) { 
        store.commit( 'user/setToken', wxobj.token) 
    } 
}

小程序用url拼接过去,H5页面通过window.location.href.replace获取到内容

子传父(H5传给小程序):

注意: 在H5系统(被嵌入) 需要安装官方的weixin-js-sdk包,步骤如下:

(1)安装:

pnpm add weixin-js-sdk

(2)使用的页面引入:

import wx from "weixin-js-sdk";

(3)使用传参给父:

wx.miniProgram.postMessage({ 
    data: { token } 
});
本地系统接收(小程序)
<web-view src="{{webUrl}}" bindmessage="getMessage"/>


//接收网页数据
 getMessage: function (res) {
    let token = res.detail.data;
    this.setData({ token });
  },

四、 H5 跳转回小程序。

需要用到上面引入的weixin-js-sdk包

const name = '天天'
wx.miniProgram.navigateTo({
  url: `/pages/my/my?name=${name}` , // 小程序地址
  success () {
    console.log('question success')
  },
  fail (error) {
    console.log(error)
  }
})

父系统能拿到?后面的传参数

onLoad(option) { 
    this.name = JSON.parse(option.name); 
},

更多weixin-js-sdk包的API可以去官网查:点击跳去
在这里插入图片描述

### 页面嵌套时 URL 跳转的方法及实现方式 在页面嵌套的情况下,URL 的跳转需要考虑当前页面所处的层次结构。以下是几种常见的实现方法及其适用场景: #### 1. 使用 `window.location.href` 进行本页面跳转 当需要在同一 iframe 中进行页面跳转时,可以使用 `window.location.href` 来设置新的地址。这种方法适用于简单的页面替换操作[^1]。 ```javascript window.location.href = 'https://example.com/new-page'; ``` #### 2. 使用 `parent.location.href` 实现上一层级页面跳转 如果当前页面位于多层嵌套中的某一层(例如 B 页面),而希望跳转到其父级页面所在的上下文中,则可以使用 `parent.location.href`。 ```javascript parent.location.href = 'https://example.com/parent-page'; ``` 需要注意的是,在某些浏览器的安全策略下,跨域访问可能会受到限制,因此需确保父子页面处于同一域名之下。 #### 3. 使用 `top.location.href` 完成最外层页面跳转 对于深层嵌套的情况,比如 C 页面被嵌套于多个 iframe 层次之中,此时可通过 `top.location.href` 将整个顶层窗口重定向至指定链接。 ```javascript top.location.href = 'https://example.com/top-level-page'; ``` 此方法通常用于强制跳出所有中间框架并加载一个新的顶级文档资源。 #### 4. Vue.js 中组件间路由切换 在基于单页应用(SPA)技术栈开发的应用程序里(如Vue),推荐利用 `$router.push()` 或者 `$router.replace()` 方法完成内部状态转移而非统意义上的url刷新行为[^3]。 示例代码如下所示: ```javascript this.$router.push({ path: '/target-route' }); // 或者 this.$router.replace('/another-target'); ``` 这两种调用形式的区别在于前者会在历史记录堆栈中新增一条入口以便后续回退动作;后者则会直接覆盖掉现有条目从而避免累积过多无意义的历史节点。 #### 5. App 嵌入 H5 页面跳转小程序案例分析 针对移动端应用场景下的特殊需求——即从宿主App内的webview容器环境出发前往微信生态体系里的轻量化服务载体(mini program)-我们可借助 url scheme 协议机制达成目的[^2]. 典型流程概览: - 构造符合目标平台识别标准的形式化表达串; - 利用 document.location.assign() 函数发起请求; 实际编码片段可能类似于这样子的样子: ```html <a href="weixin://dl/business/?t=xxxxx">立即体验</a> <script type="text/javascript"> function redirectToMiniProgram(){ var ua = navigator.userAgent.toLowerCase(); if(/micromessenger/.test(ua)){ alert('已在微信客户端内打开!'); } else{ try { document.location.assign("weixin://dl/business/?t=xxxxx"); } catch(e){ console.error("无法正常唤起", e); } } } </script> <button onclick="redirectToMiniProgram()">进入小程序</button> ``` 以上就是不同条件下处理页面嵌套状态下实施有效url导航的一些技巧总结. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值