在微信小程序内要跳转至外部的H5页面,做法比较简单。可以看到微信官方文档中,微信小程序提供了承载网页的容器: web-view,通过这个容器,其实可以实现在小程序内打开一个H5页面。也就是可以在小程序中设置一个空白页面,专门用于打开此类外部H5页面。具体做法如下:
1、在小程序内新建一个空白页面,内置web-view容器,用于承载网页
index.wxml 文件:
<view class="page-body">
<web-view src="{{targetUrl}}"></web-view>
</view>
index.js文件
Page({
data: {
targetUrl: '' // 打开的h5页面的地址
},
onLoad: function(option){
console.log('传过来什么地址', option.targetUrl)
this.setData({
targetUrl: option.targetUrl
})
const eventChannel = this.getOpenerEventChannel()
// 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('acceptDataFromOpenerPage', function(data) {
console.log('上个页面传来了', data)
})
}
})
如上所示,可以在onload钩子中,获取上个页面跳转过来时传递的地址,也可以监听acceptDataFromOpenerPage事件,获取上个页面通过eventChannel传递过来的更多的数据,然后再web-view容器中,绑定src参数,打开对应的外部H5页面即可。
2、在要跳转的小程序的页面的JS事件中,设置跳转地址及传递参数
goH5Page(e) {
var targetUrl = 'https://www.baidu.com';
// 跳转h5页面需要包装在小程序内,不能直接跳转
wx.navigateTo({
url: `../outside/index?targetUrl=${targetUrl}`,
success: function(res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
}
})
}
其中,这里的 /outside/index 指的是新建好的用于承载外部H5页面的空白页面
wx.navigateTo会跳转至对应的页面,并可以通过url直接传值如targetUrl,也可以通过eventChannel向被打开页面传送数据data。
由此,在现有页面触发goH5Page事件时,就会跳转至承载了H5页面的小程序页面,但其实还是在小程序内。
注意,web-view容器会自动铺满整个小程序页面,另外个人类型的下程序暂时不支持使用。
更多用法可见官方文档。
版权声明:本文为cindy647原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。