h5兼容性问题总结

ios返回页面不刷新
 
    描述:从主页面跳转到其他页面,点击左上角返回按钮回到主页面,发现页面没有刷新,而是直接读取的缓存
    
    解决:
      let browserRule = /^.*((iPhone)|(iPad)|(Safari))+.*$/;
      if (browserRule.test(navigator.userAgent)) {
        window.onpageshow = event => {
          if (event.persisted) { //如果event.persisted为true,证明该页面被浏览器缓存了
            this.initPage(); // 重新执行初始化页面方法
          }
        };
      }
2.8.7vant轮播图组件`在ios微信里有样式bug 

    描述: 主页面跳转到其他页面再返回以后,轮播图样式错乱

    解决: 改为使用`swiper插件`
 
h5跳转小程序问题

1. 跳转`小程序`标签在`微信jssdk 1.4.0`下不生效

    解决:跳转小程序标签需要使用`1.6.0`及其以上的版本

2. ios点击跳转按钮无效

    描述:在`ios微信端`从未授权的链接进入主页面,需要刷新一下才能按钮才能生效, 但直接通过已授权过的链接进入就没有这样的问题

    解决: 给`初始化微信jssdk`加了1s的延时,再次测试没有出现问题

3. 跳转`小程序`后,监听小程序关闭的方法

    描述:需求需要在关闭`小程序`后,刷新当前页面,但在微信文档没有找到h5监听小程序关闭的回调等方法

    解决:使用`visibilitychange`事件监听页面的显示隐藏
        let hiddenProperty =
        "hidden" in document
          ? "hidden"
          : "webkitHidden" in document
          ? "webkitHidden"
          : "mozHidden" in document
          ? "mozHidden"
          : null;
      document.addEventListener("visibilitychange", () => {
        if (document[hiddenProperty]) {
          // console.log("页面隐藏了");
        } else {
          // console.log("页面显示了");
        }
      });
   注意:1.由于兼容性原因,请确保使用`document.addEventListener`而不是`window.addEventListener`,`Safari<14`仅支持前者

       2.`Safari7`不支持该事件
 
挽留弹框问题

1.  华为手机需要手动点一下才会触发`popstate`

    解决:暂时没有找到解决方法

2. ios跳转页面点击返回,页面出现挽留弹框

    解决:从其他页面返回不注册弹框事件
     window.addEventListener(
        "popstate",
        () => {
            //跳转页面时加上的flag
          let goProduct = localStorage.getItem("goProduct") || "";
          if (goProduct) {
            localStorage.removeItem("goProduct");
          } else {
            this.pupObj.detainFlag = true;
            this.pupObj.detainCash = this.cashCount;
          }
        },
        false
      );

  

君不见,高堂明镜悲白发,朝如青丝暮成雪
原文地址:https://www.cnblogs.com/lzhflzjx/p/14278964.html