webview调用ios或者安卓的方法(内嵌h5页面调用app原生方法)

1.配合使用调用app原生的方法(h5页面不需要回调和数据)

  

实例1
    // 通知客户端,token失效
    callTokenLostToApp(){
        let boswer = vm.config.getBrowser()
        if(boswer == 'isiOS'){
            window.webkit.messageHandlers.tokenExpiredTransmit.postMessage(1);
        }else if(boswer == 'isAndroid'){
            window.tokenExpiredTransmit.jsMethod(1)
        }
    },
实例2
// 关闭页面
    closePageApp(cb){
        let boswer = vm.config.getBrowser()
        // IOS 关闭页面
        if(boswer == 'isiOS'){
            // 这段代码是固定的,必须要放到js中
            window.webkit.messageHandlers.closePage.postMessage(1);
        // 安卓关闭页面
        }else if(boswer == 'isAndroid'){
        window.closePage.jsMethod(1)
  }  },

2.配合使用调用app原生的方法(h5页面需要回调和数据)

// 从App获取UUID(手机唯一标识)
// 从App获取UUID(手机唯一标识)
    getSystemInfoFromApp(cb){
        let boswer = vm.config.getBrowser()
        // IOS 获取UUID
        if(boswer == 'isiOS'){
            // 这段代码是固定的,必须要放到js中
            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 = 'wvjbscheme://__BRIDGE_LOADED__';
                document.documentElement.appendChild(WVJBIframe);
                setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
            }

            /*与OC交互的所有JS方法都要放在此处注册,才能调用通过JS调用OC或者让OC调用这里的JS*/
            setupWebViewJavascriptBridge(function(bridge) {
                /*JS给ObjC提供公开的API,ObjC端通过注册,就可以在JS端调用此API时,得到回调。ObjC端可以在处理完成后,反馈给JS,这样写就是在载入页面完成时就先调用*/
                bridge.callHandler('getSystemInfoFromApp', function(responseData) {
                    if(cb && typeof cb == 'function'){
                        cb(responseData)
                    }else{
                        return responseData
                    }
                })
            })
        // 安卓获取UUID
        }else if(boswer == 'isAndroid'){
            let systemInfo = window.AndroidWebView.getSystemInfoFromApp();
            if(cb && typeof cb == 'function'){
                cb(systemInfo)
            }else{
                return systemInfo
            }
        }
    },

 标红字段为调用的app端定义的方法名,需要app端定义方法配合

觉得有用请顶一下,谢谢

转载于:https://www.cnblogs.com/wendyAndJken/p/9318501.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值