微信小程序webview与VUE-H5实时通讯踩坑无数实战记录(亲测可实现)

 更新时间:2025年08月23日 14:08:52   作者:OvO张张  
小程序支持webview以后,我们开发的好多h5页面,就可以直接在小程序里使用了,这篇文章主要介绍了微信小程序webview与VUE-H5实时通讯的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

背景:微信小程序、vue3搭建开发的H5页面

在微信小程序开发中,会遇到嵌套H5页面,H5页面需要向微信小程序发消息触发微信小程序某个函数方法,微信开发文档上写的非常不清楚,导致踩了很多坑,该文章总结可直接使用方法

在开发中 ,微信小程序内嵌webview,H5想要与微信小程序发消息,必须要使用微信文档中的wx.miniProgram的方法,但想要在H5中使用该方法,必须需要引入JSSDK.js文件,官方其实并没有给出明确的引入方式,网上方法很多,踩坑无数啊

具体实现步骤

1、配置域名

首先想要实现通讯,我们webview中嵌套的H5必须要配置在微信公众号开发平台的业务域名

登录微信公众平台-在管理-开发管理-开发设置-业务域名中配置我们访问的H5(该权限需要小程序管理员才能配置)

2、SDK文件引入

在vue项目也就是我们H5项目中引入JSSDK 1.3.2,(目前是这个版本,具体可查看web-view | 微信开放文档

踩坑点:有很多文章写的需要在根项目index.html文件中引入,类似

但是不知道为什么,我在这引入无法实现通讯 ,有知道的大佬还请帮我解惑

后来改用在需要操作的H5页面上引入(这是我们的H5页面,之前看别的文档一直以为引入是在微信小程序里面引入),这样引入就能调用wx.miniProgram里面的方法

// 因为项目用的是uniapp,所以有onLoad方法,vue可以用onMounted生命周期
// 需要引入的H5页面内引入JSSDK
  
onLoad() {
    this.$nextTick(() => {
      const script = document.createElement('script');
      script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js';
      script.onload = () => {};
      document.head.appendChild(script);
    })
},

3、使用

H5实例:

<template>
  	<button @click="backMini">按钮</button>
</template>

<script>
export default {
  onLoad() {
    uni.showLoading({
      title: '加载中...'
    })
    this.$nextTick(() => {
      const script = document.createElement('script');
      script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js';
      script.onload = () => {};
      document.head.appendChild(script);
      setTimeout(() => {
        uni.hideLoading()
        this.backMini();
      }, 1000)
    })
  },
  methods: {
    backMini(){
      wx.miniProgram.redirectTo({url: '/pagesB/apply-result/index?applyResult=1&isAuth=true'})
      wx.miniProgram.postMessage({
        data: 'back'
      })
    },
  }
}
</script>

<style lang="scss" scoped>

</style>

然后在我们的小程序webview.vue中可以这样接收

<template>
  <web-view :src="webviewurl" :webview-styles="webviewStyles" @message="onWebViewMessage" ></web-view>
</template>

<script>
  export default {
   data() {
    return {
     webviewurl: '',
     webviewStyles: {
      progress: {
       color: 'transparent',
       marginTop: '-100px'
      }
     },
    }
   },
   onLoad() {
    let agreementUrl = this.$hxGetItem('webview');
    this.webviewurl = agreementUrl;
    console.log(this.webviewurl)
   },

   onBackPress(options) {
    let pages = getCurrentPages()
    let page = pages[pages.length - 1];
    let currentPages = page.$getAppWebview()
    currentPages.close()
    return false
   },
   methods: {
      // 接收H5向微信小程序发的消息
      onWebViewMessage(e) {
        console.log('收到 WebVi', e.detail.data);
      },
   }
  }
</script>

<style lang="scss" scoped>
  page{background-color: #F8F8F8;}
  .itemBox{
   border-bottom: 2rpx solid #EEEEEE;
  }
</style>

4、注意点

web-view | 微信开放文档

在微信开发文档中有写明,wx.miniProgram.postMessage只有在特定时机才会触发message事件,什么意思呢,就是我在H5页面点击了操作按钮,向小程序发送了消息,这时候小程序并不会实时收到我的消息,而是在我操作了webview或者上面协议几种情况才会触发小程序端的@message才会收到消息,这也是一个坑点!他们的交互并不是实时的,

所以在实际业务中,要根据文档灵活变通,例如我这里的交互是在H5页面点击操作需要跳转到小程序内的某个页面,我这里直接用的是wx.miniProgram.redirectTo ,这时候webview也销毁了会触发我的message,也能传递消息了

总结

到此这篇关于微信小程序webview与VUE-H5实时通讯的文章就介绍到这了,更多相关微信小程序webview与VUE-H5实时通讯内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript 中的 Symbol 特性及属性详解

    JavaScript 中的 Symbol 特性及属性详解

    Symbol是ES6引入的一种独特且强大的原始数据类型,具有独一无二性、不可枚举性等特性,适用于模拟私有属性、定义常量、元编程等场景,JavaScript提供了相应的方法来操作Symbol属性,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • JavaScript表单即时验证 验证不成功不能提交

    JavaScript表单即时验证 验证不成功不能提交

    这篇文章主要为大家详细介绍了JavaScript表单即时验证,验证不成功不能提交,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 使用 UniApp 实现小程序的微信登录功能

    使用 UniApp 实现小程序的微信登录功能

    这篇文章主要介绍了使用 UniApp 实现小程序的微信登录功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • JavaScript事件概念详解(区分静态注册和动态注册)

    JavaScript事件概念详解(区分静态注册和动态注册)

    这篇文章主要介绍了JavaScript事件(区分静态注册和动态注册)的相关资料,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下
    2021-02-02
  • 微信小程序系列之自定义顶部导航功能

    微信小程序系列之自定义顶部导航功能

    这篇文章主要介绍了微信小程序系列之自定义顶部导航功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • js判断一个对象是数组(函数)的方法实例

    js判断一个对象是数组(函数)的方法实例

    这篇文章主要给大家介绍了关于利用js如何判断一个对象是数组(函数)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JS具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • JS模拟实现串行加法器

    JS模拟实现串行加法器

    这篇文章主要为大家详细介绍了JS模拟实现串行加法器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • JavaScript常考手写题之柯里化与数组扁平化的实现

    JavaScript常考手写题之柯里化与数组扁平化的实现

    这篇文章主要为大家详细介绍了JavaScript常考手写题中柯里化与数组扁平化、数组去重的实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • JavaScript动态添加数据到表单并提交的几种方式

    JavaScript动态添加数据到表单并提交的几种方式

    这篇文章主要介绍了JavaScript动态添加数据到表单并提交,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • javascript中获取元素标签中间的内容的实现方法

    javascript中获取元素标签中间的内容的实现方法

    下面小编就为大家带来一篇javascript中获取元素标签中间的内容的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10

最新评论