小程序中的web-view与h5网页之间的交互

本文详细介绍了微信小程序与网页之间的两种交互方式:小程序向网页传值可通过URL参数实现,而网页向小程序传值则有两种方法,一是利用URL参数结合小程序转发,二是使用微信SDK的postMessage方法与小程序的bindmessage事件进行通讯。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

web-view

 

阅读文档发现,其实小程序的通过将h5的网址放在web-view标签的src 属性上即可打开,不过这h5的网址需要在微信后台设置为白名单。那么小程序与网页之间如何交互呢:

1.小程序向网页传值

小程序内打开网页的话,有时需要向网页内传递参数。可将需要带向网页的值通过拼接参数方式实现,然后再在网页内截取即可
 

 

2,网页向小程序传值

        网页像小程序传值的 有两种方式可以实现,一种是通过url和小程序的转发方法,将需要传给小程序的值当做参数放在当前url上,小程序中通过点击转发即可获取。这种方法缺点是只能在点击转发时才可传

 onShareAppMessage: function (options) {
    let webViewUrl = options.webViewUrl;//web-view当前的网址
}
         另外一种是通过使用微信sdk的postMessage方法,然后小程序web-viewd中的bindmessage方法会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data }
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### 微信小程序 `web-view` 的交互方法 微信小程序提供了 `web-view` 组件用于加载外部网页,但由于安全性和性能考虑,小程序 `web-view` 之间交互能力受到一定限制。以下是几种常见的实现方式及其适用场景: #### 方法一:通过 URL 参数传递数据 可以通过跳转至特定的 URL 来向 `web-view` 中嵌入的 H5 页面传递参数。H5 页面可以在初始化时解析这些参数并执行相应逻辑。 示例代码如下: ```javascript // 小程序端调用 navigateTo 或 redirectTo 跳转到 web-view 页面 wx.navigateTo({ url: '/pages/webview/index?url=https://example.com/page?param=value' }); ``` 在 H5 页面中获取参数: ```javascript const params = new URLSearchParams(window.location.search); params.forEach((value, key) => { console.log(`${key}: ${value}`); }); ``` 这种方法适用于简单的单向通信需求[^1]。 --- #### 方法二:利用 `postMessage` 实现双向通信 自微信基础库版本 **2.7.0** 开始支持 `web-view` 和小程序间的双向消息通信。具体操作流程如下: ##### 小程序发送消息给 H5 页面 小程序可通过 `my.postMessage` 向 H5 发送消息: ```javascript const webViewContext = wx.createWebViewContext('webviewId'); // 需要指定 web-view 的 id 属性 webViewContext.postMessage({ data: 'message from miniprogram' }); ``` ##### H5 接收来自小程序的消息 H5 可以通过监听 `window.WeixinJSBridge.on` 获取小程序发来的消息: ```javascript if (typeof WeixinJSBridge !== "undefined") { WeixinJSBridge.on("sendMessage", function(data) { console.log("Received message:", data); // 处理接收到的数据 }); } ``` ##### H5 发送消息回小程序 H5 使用 `WeixinJSBridge.invoke` 向小程序发送消息: ```javascript WeixinJSBridge.invoke("postMessage", { data: "message from h5" }, function(response) { console.log("Response from mini program:", response); }); ``` 小程序接收消息: ```javascript Page({ onShow() { this.selectComponent('#webview').onMessage(function(event) { console.log("Received message from H5:", event.detail.data); }); } }); ``` 此方法适合复杂业务场景下的实时交互--- #### 方法三:基于本地存储共享有限状态 虽然小程序H5 的存储机制不同,但仍可借助某些间接手段同步少量数据。例如,在小程序侧保存临时数据并通过定时轮询的方式通知 H5 更新界面显示内容。 需要注意的是,这种方式受限于微信设定的小程序 Storage 上限(10MB),以及两者之间无法完全互通的技术障碍。 --- #### 特殊情况处理——覆盖 `web-view` 的组件选择 当需要设计能够同时适配普通小程序页面和 `web-view` 场景的功能模块时,推荐采用条件渲染策略。即根据当前运行环境动态切换使用的视图容器类型 (`cover-view` vs `view`)。 样例配置片段展示如下: ```json { "usingComponents": { "custom-component": "./components/custom" }, "permission": { "scope.userLocation": { "desc": "你的位置信息将用于..." } } } ``` 配合 JavaScript 判断逻辑完成差异化布局调整[^2]。 --- #### 已知局限性说明 尽管上述方案能够在一定程度上缓解开发过程中的痛点,但仍然存在若干未解决难题。例如,跨域资源访问权限控制严格;部分 HTML/CSS 功能受制于平台兼容性差异等问题均需额外注意规避风险[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值