JSbridge在Vue的封装与交互

JSbridge: https://github.com/lzyzsd/JsBridge

JSbridge.js

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

//这是必须要写的,用来创建一些设置
function setupWebViewJavascriptBridge(callback) {
    //Android使用
    if (isAndroid) {
        if (window.WebViewJavascriptBridge) {
            callback(WebViewJavascriptBridge)
        } else {
            document.addEventListener(
                'WebViewJavascriptBridgeReady',
                function () {
                    callback(WebViewJavascriptBridge)
                },
                false
            );
        }
        console.log('tag', '安卓')
        sessionStorage.phoneType = 'android'
    }

    //iOS使用
    if (isiOS) {
        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 = 'wvjbscheme://__BRIDGE_LOADED__';
        document.documentElement.appendChild(WVJBIframe);
        setTimeout(function () {
            document.documentElement.removeChild(WVJBIframe)
        }, 0);
        console.log('tag', 'ios');
        sessionStorage.phoneType = 'ios'
    }
}

//注册回调函数,第一次连接时调用初始化函数(Android需要初始化,ios不用)
setupWebViewJavascriptBridge(function (bridge) {
    if (isAndroid) {
        //初始化
        bridge.init(function (message, responseCallback) {
            var data = {
                'Javascript Responds': 'Wee!'
            };
            responseCallback(data);
        })
    }
})

export default {
    // js调APP方法 (参数分别为:app提供的方法名  传给app的数据  回调)
    callHandler(name, data, callback) {
        setupWebViewJavascriptBridge(function (bridge) {
            bridge.callHandler(name, data, callback)
        })
    },
    // APP调js方法 (参数分别为:js提供的方法名  回调)
    registerHandler(name, callback) {
        setupWebViewJavascriptBridge(function (bridge) {
            bridge.registerHandler(name, function (data, responseCallback) {
                callback(data, responseCallback)
            })
        })
    }
}

main.js中引入

import Bridge from './config/JSbridge.js'
Vue.prototype.$bridge = Bridge

组件中使用

方法名和app开发人员沟通好,这里js调app,app提供的方法是callNative;app调js,js提供的方法是callJs

//注册方法
  mounted() {
    this.registerJs()
  },

//js调app
  sendMsg() {
    let msg = this.msg
    this.$bridge.callHandler('callNative', msg, (res)=>{
      alert('获取app响应数据:' + res)
      this.test = res
    })
  },

//app调js
  registerJs() {
    this.$bridge.registerHandler('callJs', (data, responseCallback) => {
      alert('app主动调用js方法,传入数据:' + data)
      responseCallback(data)
    })
  }
上一篇 微信公众号支付WeixinJSBridge与JS-SDK
下一篇 Vue axios POST传 字符串/键值对 后台@RequestParam接收为空 及使用application/x-www-form-urlencoded问题详解
目录
文章列表
1 Nexus3安装和使用
Nexus3安装和使用
2
OKHttp锁定证书CertificatePinner
OKHttp锁定证书CertificatePinner
3
Linux下MySQL为用户分配指定数据库
Linux下MySQL为用户分配指定数据库
4
Flutter中设置TabBarView高度
Flutter中设置TabBarView高度
5
推荐几个基于Spring Boot开发的CMS系统
推荐几个基于Spring Boot开发的CMS系统
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。