小程序使用web-view实现与H5交互

在小程序端使用web-view内嵌H5网页,web-view通过设置src属性来指定网页即可在小程序中显示。一个页面只能有一个web-view,且会自动铺满整个小程序页面。

web-view官方文档:web-view | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

H5端代码:

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

// javascript
wx.miniProgram.navigateTo({url: '/path/to/page'})
wx.miniProgram.postMessage({ data: 'foo' })
wx.miniProgram.postMessage({ data: {foo: 'bar'} })
wx.miniProgram.getEnv(function(res) { console.log(res.miniprogram) })

小程序端代码:

<web-view src="{{url}}" bindmessage="onLoadMessage" bindload="onWebLoad" binderror="onWebError"></web-view>

web-view组件属性: 

属性类型默认值必填说明最低版本
srcstringwebview 指向网页的链接。可打开关联的公众号的文章,其它网页需登录小程序管理后台配置业务域名。1.6.4
bindmessageeventhandler网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data },data是多次 postMessage 的参数组成的数组1.6.4
bindloadeventhandler网页加载成功时候触发此事件。e.detail = { src }1.6.4
binderroreventhandler网页加载失败的时候触发此事件。e.detail = { src }1.6.4

H5网页中可使用JSSDK 1.3.2提供的接口返回小程序页面。 支持的接口有:

接口名说明最低版本
wx.miniProgram.navigateTo参数与小程序接口一致1.6.4
wx.miniProgram.navigateBack参数与小程序接口一致1.6.4
wx.miniProgram.switchTab参数与小程序接口一致1.6.5
wx.miniProgram.reLaunch参数与小程序接口一致1.6.5
wx.miniProgram.redirectTo参数与小程序接口一致1.6.5
wx.miniProgram.postMessage向小程序发送消息,会在特定时机(小程序后退、组件销毁、分享)触发组件的message事件1.7.1
wx.miniProgram.getEnv获取当前环境1.7.1

小程序向网页传值

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

<!-- 小程序page -->
<web-view src="http://a.html?id=123"></web-view>
<!-- 网页 a.html-->
<script>
    let id = getUrlParam('id'); 
</script>

 网页向小程序传值

  • 通过url和小程序的转发方法

将需要传给小程序的值当做参数放在当前url上,小程序中通过点击转发即可获取。这种方法缺点是只能在点击转发时才可传。

onShareAppMessage: function (options) {
    let webViewUrl = options.webViewUrl;//web-view当前的网址
}
  • 使用微信sdk的postMessage方法

通过使用微信sdk的postMessage方法,然后小程序web-view中的bindmessage方法会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data } 

H5端:

<!-- html -->
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

// javascript
wx.miniProgram.postMessage({ data: 'foo' })
wx.miniProgram.postMessage({ data: {foo: 'bar'} })

小程序端:

<!-- wxml -->
<web-view src="http://a.html?id=123" bindmessage="postMessage"></web-view>

// javascript
postMessage(e) {
    console.log(e)
},

注意:

网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。

也就是说,这唯一的一种通信方式,并不是按照常规的思路“网页向小程序发送数据,然后小程序监听到并执行回调”运作的,只有(小程序后退、组件销毁、分享)这三种情况下,bindmessage才会被触发并接收消息。

所以,即使在网页中调用了wx.miniProgram.postMessage(),小程序也不会立即响应,bindmessage所绑定的函数不会执行。

<!-- html -->

<script type="text/javascript">
    wx.miniProgram.navigateBack({delta: 1})
    wx.miniProgram.postMessage({ data: '123' })
</script>

微信小程序中,可以通过 `web-view` 标签加载一个 web 页面,并且可以在该页面中调用一些函数。同时,也可以在小程序中通过 `wx` 对象调用一些 `web-view` 实例上的函数。 以下是一些示例代码: 1. 在 `web-view` 页面中调用 `window` 上的函数 在 web 页面中,可以使用 `window` 对象定义一个自定义函数,例如: ```js function customFunc() { console.log('custom function called'); } ``` 然后在页面中的某个事件或函数中调用该函数,例如: ```js document.getElementById('btn').addEventListener('click', function() { window.customFunc(); }); ``` 在小程序中,则可以通过 `wx.createWebViewContext` 方法获取 `web-view` 实例的上下文对象,然后使用 `postMessage` 方法向页面发送消息,从而调用该函数,例如: ```js const webViewContext = wx.createWebViewContext('web-view'); webViewContext.postMessage({type: 'callCustomFunc'}); ``` 在 web 页面中,则需要监听 `message` 事件,当收到消息时调用相应的函数,例如: ```js window.addEventListener('message', function(event) { if (event.data.type === 'callCustomFunc') { customFunc(); } }); ``` 2. 在小程序中调用 `web-view` 实例上的函数 在小程序中,可以通过 `wx.createWebViewContext` 方法获取 `web-view` 实例的上下文对象,然后直接调用该对象上的函数,例如: ```js const webViewContext = wx.createWebViewContext('web-view'); webViewContext.postMessage({type: 'callWebViewFunc'}); ``` 在 web 页面中,则需要监听 `message` 事件,当收到消息时调用相应的函数,例如: ```js window.addEventListener('message', function(event) { if (event.data.type === 'callWebViewFunc') { // 调用 web-view 实例上的函数 console.log('web-view function called'); } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值