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

时间:2024-04-15 14:31:47

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端定义方法配合

觉得有用请顶一下,谢谢