微信小程序webview和小程序通讯

2024-05-29 1372阅读

1.背景介绍

1.1需要在小程序嵌入vr页面,同时在vr页面添加操作按钮与小程序进行通信交互

1.2 开发工具:uniapp开发小程序

1.3原型图

        功能:.点击体验官带看跳转小程序的体验官带看页面

微信小程序webview和小程序通讯

         功能:点击立即咨询唤起小程序弹窗打电话

微信小程序webview和小程序通讯

2.组件及api介绍

uniapp官网:web-view | uni-app官网 (dcloud.net.cn)

web-view

web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。

各小程序平台,web-view 加载的 url 需要在后台配置域名白名单,包括内部再次 iframe 内嵌的其他 url 。

属性说明

属性名类型说明平台差异说明
srcStringwebview 指向网页的链接
allowString用于为 iframe 指定其特征策略H5
sandboxString该属性对呈现在 iframe 框架中的内容启用一些额外的限制条件。H5
fullscreenBoolean是否铺满整个页面,默认值:true。H5 (HBuilder X 3.5.4+)
webview-stylesObjectwebview 的样式App-vue
update-titleBoolean是否自动更新当前页面标题。默认值:trueApp-vue (HBuilder X 3.3.8+)
@messageEventHandler网页向应用 postMessage 时,会在特定时机(后退、组件销毁、分享)触发并收到消息。H5 暂不支持(可以直接使用 window.postMessage)
@onPostMessageEventHandler网页向应用实时 postMessageApp-nvue
@loadEventHandler网页加载成功时候触发此事件。微信小程序、支付宝小程序、抖音小程序、QQ小程序
@errorEventHandler网页加载失败的时候触发此事件。微信小程序、支付宝小程序、抖音小程序、QQ小程序

在小程序端,用法和iframe类似,直接在src赋值在线地址

 

注意:

  • 小程序仅支持加载网络网页,不支持本地html
  • 小程序端 web-view 组件一定有原生导航栏,下面一定是全屏的 web-view 组件,navigationStyle: custom 对 web-view 组件无效。
  • 小程序平台, src 指向的链接需登录小程序管理后台配置域名白名单。
  • 小程序平台,个人类型与海外类型的小程序使用 web-view 组件,提交审核时注意微信等平台是否允许使用
  • 小程序的web-view使用的是小程序自带的浏览器内核,不同厂商不一样,详见
  • 各小程序平台,web-view 加载的 url 需要在后台配置域名白名单,包括内部再次 iframe 内嵌的其他 url 。

     加载的网页中支持调用部分 uni 接口:

    方法名说明平台差异说明
    uni.navigateTonavigateTo
    uni.redirectToredirectTo
    uni.reLaunchreLaunch
    uni.switchTabswitchTab
    uni.navigateBacknavigateBack
    uni.postMessage向应用发送消息抖音小程序不支持、H5 暂不支持(可以直接使用 window.postMessage)
    uni.getEnv获取当前环境抖音小程序与飞书小程序不支持

    uni.postMessage(OBJECT)

    网页向应用发送消息,在  的 message 事件回调 event.detail.data 中接收消息。

    Tips

    • 传递的消息信息,必须写在 data 对象中。
    • event.detail.data 中的数据,以数组的形式接收每次 post 的消息。(注:支付宝小程序除外,支付宝小程序中以对象形式接受)

      #uni.getEnv(CALLBACK)

      callback 返回的对象

      属性类型说明
      plusBooleanApp
      nvueBooleanApp-nvue, uni.webview.1.5.4.js+ 支持
      miniprogramBoolean微信小程序
      smartprogramBoolean百度小程序
      miniprogramBoolean支付宝小程序

      3.实际操作

      下面直接来看示例

      
      
        
        
        
        测试
        
        
        
        
        
        
      
      
        
          
            
            
          
          
            
            
              体验馆带看
              看房型
              立即咨询
            
            
            
              
                

      房型预览

      收起

      {{item.name}}

      • 因为使用的vantUi库,所以下载了vant.min.js,想用vue开发所以下载了vue.min.js,这2个不重要
      • 需要引入微信小程序 JS-SDK
      • 与uniapp建立连接,引入hellouniapp.dcloud.net.cn/hybrid/html/uni.webview.1.5.5.js,可以下载到本地

        调用api与小程序通信

        new Vue({
          el: '#app',
          components: {
          },
          data () {
            return {
              urlParams: {
                rooms: []
              },
              showRoomPopup: false
            }
          },
          computed: {
          },
          created () {
          },
          watch: {
          },
          mounted () {
            const { params } = this.urlToObj(location.href)
            if (params) {
              this.urlParams = JSON.parse(decodeURI(params))
            }
            document.addEventListener('UniAppJSBridgeReady', () => {
              uni.getEnv((res) => {
                console.log('当前环境:' + JSON.stringify(res));
              });
            })
          },
          methods: {
            // url参数转对象
            urlToObj (url) {
              let obj = {};
              if (url.indexOf('?') >= 0) {
                let str = url.slice(url.indexOf('?') + 1);
                let arr = str.split('&');
                console.log(str, arr)
                for (let j = arr.length, i = 0; i  
         
        

        页面预览效果:

        微信小程序webview和小程序通讯

        小提示:如何在开发者工具查看webiew页面的信息

        微信小程序webview和小程序通讯

        小程序端代码参考

          
        
        
        import { callPhone } from '@/utils';
        export default {
          data() {
            return {
              vrUrl:
                // 这里要换成你的在线网页地址,我这里写的是本地的
                `http://127.0.0.1:5500/vr-demo/index.html?params=` +
                encodeURI(
                  JSON.stringify({
                    rooms: [
                      {
                        name: '房间1',
                        url: 'https://www.realsee.com/website/customer/dataSpace/vr/kPJJK5rx',
                      },
                      {
                        name: '房间2',
                        url: 'https://www.realsee.com/website/customer/dataSpace/vr/kPJJK5rx',
                      },
                    ],
                  })
                ),
            };
          },
          onLoad(props) {
            console.log(props);
          },
          methods: {
            // 接收webview传来的消息
            onMessage(e) {
              const { data } = e.detail;
              console.log(
                data,
                'web-view传来的信息,在小程序后退、组件销毁、分享会触发'
              );
              console.log(data.at(-1));
              if (data?.at(-1)?.action === '咨询') {
                callPhone('18205236589');
              }
            },
          },
        };
        
        
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]