Taro小程序webview使用API及避坑指南

Taro小程序webview组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面。
注意:个人类型的小程序暂不支持使用。客户端 6.7.2 版本开始,navigationStyle: custom 对 webview组件无效,小程序插件中不能使用。
以上意味着:webview的页面无法自定义导航栏,无法自定义高度、样式等,去加载了webview,那么webview中的h5页面将具备最高控制权,
所以小程序开发者如果想在webview组件上做任何修改,只能建议自定义组件。
小程序开发者可以做哪些?
1.可以自定义设置页面标题

最好写在生命周期constructor、willMount、didMount中,仅第一次生效;同时如果加载的h5页面配置了title标题,h5页面的title会覆盖页面级设置的标题。
自定义标题:

Taro.setNavigationBarTitle({
  title: '自定义标题'
});

2.方法说明,引入及API使用

参数类型必填说明
srcstringwebview 指向网页的链接。可打开关联的公众号的文章,其它网页需登录小程序管理后台配置业务域名。
onMessageBaseEventOrigFunction<onMessageEventDetail>网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data }
onLoadBaseEventOrigFunction<onLoadEventDetail>网页加载成功时候触发此事件
onErrorBaseEventOrigFunction<onErrorEventDetail>网页加载失败的时候触发此事件

代码示例:

import Taro, { Component,getCurrentInstance } from '@tarojs/taro'
import { View, WebView } from '@tarojs/components'

export default class extends Component {
  config = {
    navigationBarTitleText: ''
  }

  url = ''
  title = ''

  componentWillMount() {
    //使用decodeURIComponent,是因为如果直接获取url,如果url中含有"?"等携带参数,
    //会导致参数丢失,所以传入url时使用encodeURIComponent做一次转义
    this.url = decodeURIComponent(getCurrentInstance()?.router?.params?.url || '')
    this.title = decodeURIComponent(getCurrentInstance()?.router?.params?.title || '')
    Taro.setNavigationBarTitle({ title: this.title })
  }

  //网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息
  onWebMessage(e){
    const {data} = e.detail;
    console.log("onWebMessage==",data)
  }

  //网页加载成功时候触发此事件
  onWebLoad(e){
    const {src} = e.detail;
    console.log("onWebLoad==",src)
  }

  //网页加载失败的时候触发此事件
  onWebError(e){
    const {errMsg,url} = e.detail;
    console.log("onWebError==",errMsg)
  }

  render () {
    return (
      <View className='webview'>
        <WebView src={this.url}
                 onMessage =  {this.onWebMessage}
                 onLoad=  {this.onWebLoad}
                 onError =  {this.onWebError}
        />
      </View>
    )
  }
}

同时h5页面如何调用原生api,如何向webview页面发送消息,可以参考我的另外一篇博客:Taro webview中的h5页面如何使用原生小程序API

以上即本人使用心得,如有帮助,记得点赞三连~谢谢~

客官且慢~扫一扫个人微信小程序,琳琅街比价,谢谢支持~

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
除了使用 `weixin-js-sdk`,在 Taro 微信小程序 webview 嵌套 Vue 3 + Vite 项目之间实现通信还有其他的方法,以下是一些常用的方法: 1. `window.postMessage()` 方法:可以通过 `window.postMessage()` 方法将消息发送到 Taro 微信小程序 webview 所在的 iframe 窗口。在 Taro 微信小程序中,可以通过监听 `message` 事件来接收从 Vue 3 + Vite 项目发送的消息。 2. WebSocket:可以使用 WebSocket 在 Taro 微信小程序 webview 和 Vue 3 + Vite 项目之间建立一个双向通信的连接。在 Taro 微信小程序中,可以使用 `wx.connectSocket()` 方法来建立 WebSocket 连接,并通过监听 `wx.onSocketMessage()` 方法来接收从 Vue 3 + Vite 项目发送的消息。 3. Storage API:可以使用 Storage APITaro 微信小程序 webview 和 Vue 3 + Vite 项目之间共享数据。在 Taro 微信小程序 webview 和 Vue 3 + Vite 项目中都可以使用 `localStorage` 或 `sessionStorage` 对象来存储和读取数据。 4. 通过 URL 参数传递数据:可以通过在 URL 中添加参数的方式传递数据。在 Taro 微信小程序 webview 和 Vue 3 + Vite 项目中都可以通过 `window.location.href` 或 `wx.navigateTo()` 方法来跳转页面,并在 URL 中添加参数。 以上是一些常用的在 Taro 微信小程序 webview 嵌套 Vue 3 + Vite 项目之间实现通信的方法,根据实际需求可以选择不同的方法来实现。需要注意的是,在使用这些方法时要确保数据的安全性和正确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值