美文网首页
H5与原生ios、安卓APP合并开发,兼容IOS与安卓

H5与原生ios、安卓APP合并开发,兼容IOS与安卓

作者: 林玲玲的笔记 | 来源:发表于2021-11-20 16:06 被阅读0次

1.文件名:isCheckDevice.js ,判断是安卓或者ios设备的方法

//isCheckDevice.js 
const checkDevice = {
    // js判断是否是苹果设备
    checkIsAppleDevice() {
        var u = navigator.userAgent;
          //  app = navigator.appVersion;
        var ios = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
        var iPad = u.indexOf("iPad") > -1;
        var iPhone = u.indexOf("iPhone") > -1 || u.indexOf("Mac") > -1;
        if (ios || iPad || iPhone) {
            return true;
        } else {
            return false;
        }
    },
    //js判断是否为Android设备
    checkIsAndroidDevice() {
        var u = navigator.userAgent;
        if (u.indexOf("Android") > -1 || u.indexOf("Adr") > -1) {
            return true;
        } else {
            return false;
        }
    },

    isCheck() {
      if(this.checkIsAppleDevice()) {
          return 'ios'
      } else if (this.checkIsAndroidDevice()) {
          return 'android'
      } else {
          return 'h5'
      }
    }
}

2.监听安卓或者ios键盘弹起事件

 var isIos = checkDevice.isCheck();
 var originalHeight = document.documentElement.clientHeight || document.body.clientHeight;
 if (isIos == 'android') {
        const innerHeight = window.innerHeight;
        window.addEventListener('resize', () => {
            const newInnerHeight = window.innerHeight;
            if (innerHeight > newInnerHeight) {
                // 键盘弹出事件处理
                console.log("android 键盘弹窗事件");
            } else {
                // 键盘收起事件处理
                console.log("android 键盘收起事件处理")
            }
        });
    } 
    if (isIos == 'ios') {
        window.addEventListener('focusin', () => {
            // 键盘弹出事件处理
            console.log("iphone 弹出");
    });
        window.addEventListener('focusout', () => {
            // 键盘收起事件处理
            // console.log("iphone 收起")
    });
   }

3. H5中与ios\安卓通讯的桥接

function setupWebViewJavascriptBridge (check ,callback){
  if (check == 'android') {
    if (window.WebViewJavascriptBridge) {
      callback(window.WebViewJavascriptBridge)
    } else {
      // console.log("sdkfjdks",window.WebViewJavascriptBridge);
      document.addEventListener('WebViewJavascriptBridgeReady', function () {
        if (window.onWebViewJavascriptBridgeReady) window.onWebViewJavascriptBridgeReady(window.__bridge = window.WebViewJavascriptBridge);
        callback(window.WebViewJavascriptBridge)
      }, false)
    }
  }

  if (check == 'ios') {
    if (window.WebViewJavascriptBridge) {
      return callback(window.WebViewJavascriptBridge);
    }
    if (window.WVJBCallbacks) {
      return window.WVJBCallbacks.push(callback);
    }
    window.WVJBCallbacks = [callback];
    var WVJBIframe = document.createElement('iframe');
    WVJBIframe.style.display = 'none';
    WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
    document.documentElement.appendChild(WVJBIframe);
    setTimeout(function () {
      document.documentElement.removeChild(WVJBIframe)
    }, 0)
  }
}

  function callhandler(check, name, data, callback) {
      setupWebViewJavascriptBridge(check,function (bridge){
        bridge.callHandler( name , data , function (data) {
              callback(data)
            }
        )
      })
  }

  function registerhandler(check , name, callback) {
    // console.log('check', check);
    // console.log('name', callback);
    if (check == 'android') {
      setupWebViewJavascriptBridge(check, function (bridge) {
        bridge.init(function (message, responseCallback) {
          responseCallback(message);
        });
        bridge.registerHandler(name, function (data, responseCallback) {
          if (responseCallback) {
            callback(data)
          }
        })
      })
    }

    if(check == 'ios') {
      setupWebViewJavascriptBridge(check, function (bridge){
        bridge.registerHandler(name, function (data, responseCallback) {
          if (responseCallback) {
            callback(data)
          }
        })
      })
    }
  }

  1. H5使用桥接的方式
created: function () {
            /**获取token*/
            let isCheck = checkDevice.isCheck(),
                _self = this;
            if (isCheck == 'ios' || isCheck == 'android') {
                /*
                 * registerhandler 方法中参数描述
                 * 参数1; 设备类型
                 * 参数2:约束名称(提供给 app 或 ios 调用js 方法的方法名,作用:将数据传入到前端)
                 * 参数3:回调:responseCallback(data)
                 * */
                registerhandler(isCheck, "bridegeDemo", function (data, responseCallback) {
                    console.log('data',JSON.parse(data).token);
                    _self.tokenID = JSON.parse(data).token;
                    //这里判断是编辑还是保存草稿箱,
                    // _self.getEdit();
                });
            }
        },

/**调用 app 或 ios 中的方法*/
            bakClick: function () {
                let _self = this;
                let isCheck = checkDevice.isCheck();
                /*
                 * callhandler 方法中参数描述
                 * 参数1:设备类型
                 * 参数2:约束名称(及app 或ios中定义的方法名)
                 * 参数3:传参给ios、安卓
                 * 参数4:回调、接受值
                 * */
                callhandler(isCheck, 'back', '中文测试', data => {
                    console.log('调用app或ios中的方法',data);
            })
            },

相关文章

  • H5与原生ios、安卓APP合并开发,兼容IOS与安卓

    1.文件名:isCheckDevice.js ,判断是安卓或者ios设备的方法 2.监听安卓或者ios键盘弹起事件...

  • App唤醒

    App唤醒 H5页面唤醒App,兼容iOS和安卓的方式是location.href

  • H5随笔

    H5兼容VIdeo H5让兼容安卓和IOS调用相机 移动端debug input file 拍照上传IOS图片旋转...

  • 框架技术

    原生+web 类型 原生: iOS(Objective-C),安卓(Java)web:React, Vue,H5 ...

  • app测试与h5测试有啥区别

    H5如何测试? 它跟安卓APP与IOS APP有什么样的区别呢? 我们以往的APP是使用原生系统内核的,相当于直接...

  • 跨平台技术-简介

    RN 底层是沿用iOS和安卓原生的组件,这就导致了有些组件只能在安卓或者iOS上面用 Flutter 谷歌开发,有...

  • 表单页在安卓和ios上出现的兼容性问题

    问题: MAKA页面转成h5,表单页在安卓和ios上出现的兼容性问题(ios和安卓手机软键盘收起,页面被顶上去) 解决:

  • h5给安卓和ios传数据

    h5传给安卓 h5传给ios

  • 小程序开发分享

    小程序概述 APP和和H5的区别:原生APP是软件开发者开发后,直接在安卓或者iOS系统中直接运行的软件应用,功能...

  • 测试基础-面试问题

    一.H5与原生测试过程中的区别 1.各自优势 h5页面: 优点:支持跨平台,安卓、ios不需要单独开发,只需要开发...

网友评论

      本文标题:H5与原生ios、安卓APP合并开发,兼容IOS与安卓

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