收藏
回答

web-view怎么通过bindmessage事件让小程序将web-view隐藏,或执行js逻辑?

现在的逻辑是这样的:我在小程序中使用web-view嵌入了一个我自己的页面,嵌入的url里带了一个token,也就是登录状态,现在这个token失效了,(token是用wx.login方法返回的code与后台获取的,所以token只能在小程序里获取)原本我想的是,通过某种bindmessage告诉小程序,重新给一个token,但是找了很多办法,最后发现,除了通过url地址,小程序不支持主动传递数据给H5页面。于是,我就想,能不能动态修改url地址,最后发现,修改了也没起效果。最后,我想通过wx:if的方式,重新渲染web-view标签,这样就可以刷新整个web-view了。但是,实操下来发现,在bindmessage事件里,修改url、showWeb,也是不生效的,尽管它打印出来的值是false,是'',但是web-view还是没有任何变化,也没有消失。而在其他地方(非bindmessage),修改是成功的,web-view也能消失。

我最终的目的就是,如何将token从小程序中传递给web-view内嵌的H5,或者,如何在bindmessage中执行的代码能生效。

H5页面就一个按钮,点击按钮,触发postMessage方法

----html

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

wx.miniProgram.postMessage({

  data: {

    action: 'login'

  }

})

-----wxml

<web-view src="{{url}}" bindmessage="onMessage" wx:if="{{showWeb}}" bindmessage="onMessage"></web-view>

----js

const app = getApp()

Page({

  data: {

    showWeb: false,

    url: ''

  },

  onLoad() {

    let token = wx.getStorageSync('token') || '';

    this.setData({

      showWeb: true,

      url: `http://192.168.101.230:8081/?token=${token}`

    });

    // setTimeout(() => {

    //   this.setData({ // 这边设置false,web-view2秒后能消失

    //     showWeb: false

    //   })

    // }, 2000);

  },

  onMessage(e) { // bindmessage事件

    console.log('web-view message:', e);

    let data = e.detail.data[0];

    if (data.action == 'login') {

      this.setData({ // 这里设置false,web-view还是显示,没生效

        showWeb: false,

        url: ''

      });

      console.log('showWeb', this.data.showWeb) // 但是这里打印的是false

      console.log('url', this.data.url);

    }

  }

})


回答关注问题邀请回答
收藏

1 个回答

  • 小黎
    小黎
    2025-07-23

    为啥一定要用wx.login返回的code去获取token,这个code主要是拿来获取用户openid的,不能用openid来获取token么,openid又不会变

    2025-07-23
    有用
    回复 2
    • 壹叁贰
      壹叁贰
      2025-07-23
      以前定的逻辑,小程序传code给后台,后台通过code拿unionid,经过一系列的计算(我不知道怎么算的),然后返回给前端一个token,后续请求都要带这个token,如果token失效了,就重新获取code,重新拿token。现在小程序想要引入H5页面,接口要验证token,后台java说了,重新写一个登录的接口比较麻烦,让我想办法带过去
      2025-07-23
      回复
    • 迷途未返
      迷途未返
      02-27回复壹叁贰
      解决了嘛 哥
      02-27
      回复
登录 后发表内容