H5 开发中常见的小问题

1.解决 浏览器 返回按钮不刷新的问题

 window.onpageshow = function(event) {
    if (event.persisted) {
      window.location.reload()
  }};

2.H5 中 JS 禁用安卓手机物理返回键

  XBack = {};
  (function(XBack) {
    XBack.STATE = 'x - back';
    XBack.element;

    XBack.onPopState = function(event) {
      event.state === XBack.STATE && XBack.fire();
      XBack.record(XBack.STATE); //初始化事件时,push一下
    };

    XBack.record = function(state) {
      history.pushState(state, null, location.href);
    };

    XBack.fire = function() {
      var event = document.createEvent('Events');
      event.initEvent(XBack.STATE, false, false);
      XBack.element.dispatchEvent(event);
    };

    XBack.listen = function(listener) {
      XBack.element.addEventListener(XBack.STATE, listener, false);
    };

    XBack.init = function() {
      XBack.element = document.createElement('span');
      window.addEventListener('popstate', XBack.onPopState);
      XBack.record(XBack.STATE);
    };

  })(XBack); // 引入这段js文件

  XBack.init();
  XBack.listen(function() {});

 

3.解决移动端底部input被弹出的键盘遮挡问题

       // ios 输入框被顶飞
          var inputTimer = null;
          $("#btnBoxInput").on('focus',function(){
            let u = navigator.userAgent;
            let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
            if (isiOS) {
              console.log('获取焦点了ios')
              var inputText = document.querySelector('#btnBoxInput');
                inputTimer = setInterval( () => {
                  inputText.scrollIntoView(false);
                  console.log('定时器走了')
                },100);
             
                $('.commentBtnBox').addClass('commentabsolute')
            }
          })
      

    .commentabsolute {
      position: absolute;
      bottom: 0.2rem;
      left: 0;
      display: flex;
      align-items: center;
      padding: 0 0.4rem;
      background: #fff;
      z-index: 1001;
    }

 4.计算rem布局

      // 自适应rem布局
          var FlexBox = {
            init: function () {
              var rootElement = document.documentElement
              this.dpr = window.devicePixelRatio || 1
              this.scale = 1 / this.dpr
              this.rem = rootElement.clientWidth * this.dpr / 10 //获取设备物理像素,并分成10份
              // 设置根元素字体大小
              window.document.documentElement.setAttribute('dpr', this.dpr)
              window.document.documentElement.setAttribute('rem', this.rem)
              document.documentElement.style.fontSize = this.rem / this.dpr + 'px'
              return this
            }
          }
          // 初始化方法
          FlexBox.init()
          //屏幕变化就执行该方法
          window.onresize = function () {
            FlexBox.init()
          }

5.js调用原生方法(需要原生端支持)

/**
 * JSBridgeWrapper
 */

const u = navigator.userAgent;
const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端

if(isiOS) {
  window.setupWebViewJavascriptBridge = function setupWebViewJavascriptBridge(callback) {
    if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
    if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
    window.WVJBCallbacks = [callback];
    var WVJBIframe = document.createElement('iframe');
    WVJBIframe.style.display = 'none';
    WVJBIframe.src = 'https://__bridge_loaded__';
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
  }
} else if(isAndroid) {
  window.setupWebViewJavascriptBridge = function setupWebViewJavascriptBridge(callback) {
    if (window.WebViewJavascriptBridge) {
      callback(WebViewJavascriptBridge)
    } else {
      document.addEventListener('WebViewJavascriptBridgeReady', function() {callback(WebViewJavascriptBridge)}, false);
    }
  }
} else {
  console.log('未知机型')
}
   // 调用
  window.setupWebViewJavascriptBridge(bridge => { bridge.callHandler('pullUpLogin', '', response => {
         // 返回的方法
var isLog = JSON.parse(response); }) })

 6.在ios 偶然会遇到click 点击第一次不生效 换用 touchstart

 

posted @ 2019-04-19 13:52  柠檬先生  阅读(670)  评论(0编辑  收藏  举报