美文网首页
小程序H5页面的强刷

小程序H5页面的强刷

作者: 詹小云 | 来源:发表于2021-03-22 20:39 被阅读0次

    小程序中经常会遇见webview中的h5需要强刷的场景

    如小程序原生页面返回到H5页面:

    1.小程序 --> 2.H5 --> 3.小程序

    当3.小程序往回跳到h5时,正常情况下,h5是原封不动地展示,任何监听事件都不会惊动。包括浏览器的页面隐藏与否

    //监听页面显示隐藏
    document.addEventListener(visibilitychange, (e)=>{console.log(e)}); // null
    //监听手Q页面显示隐藏
    document.addEventListener(qbrowserVisibilityChange, (e)=>{console.log(e)}); // null
    

    然后呢,你的需求又不得不强制唤醒H5(打不过产品,就好好听人家话好吧)。既然h5这边明确了做不了任何手脚,那么我们将目光放到了小程序。

    在小程序的onShow事件打了log,很明显,往回退是可以被明确感知到的。

    onShow() {
      console.log('onshow'); // onshow
    }
    

    在小程序的社区看见了很多教程文档,说是在webview的src后边增加时间戳。类似于这样

    const version = (new Date()).valueOf();
    this.data.url = `${this.data.originSrc}/${version}`;
    

    嗯哼,确实可以了嘛,但是history栈也增加了一个记录,所以往回退的时候用户需要点击两次,才可以跳回1.小程序。这跟预期的不太一致,不慌,熟悉路由API的小朋友就知道rediectTo专治路由层级。

    wx.redirectTo({ url: `/packages/webview/webview?url=${encodeURIComponent(this.data.url)}` });
    

    虽然美中不足的是,重定向的时候页面会跳闪,但是已经是目前所知最优解了。

    接下来是进阶版,嘻嘻,我只想要指定时刻刷新H5,并不想每次回来都要看到那个跳闪啊。那就可以设个全局变量啦。(数据存储方式是为了演示,不是最优存储哈)

    // 跳到某个页面你想要重刷h5
    wx.setStorageSync('webview_refresh_sign', 'refresh');
    
    // webview页面
    const isRefresh = wx.getStorageSync('webview_refresh_sign');
    if (isRefresh) {
      // do your thing
    }
    

    相关文章

      网友评论

          本文标题:小程序H5页面的强刷

          本文链接:https://www.haomeiwen.com/subject/issbcltx.html