Android WebViewJSBridge分析

2017-12-08  本文已影响849人  小锡兵鸥

Android WebViewJSBridge分析

WebViewJavascriptBridge的github地址

这种方法采用js注入的方式来实现webView与h5的交互
相关文件的UML图


image

Native相关操作

本地js代码实现的功能

现在H5页面获取WebViewJavascriptBridge对象,可以进行交互啦!

H5发送消息到Native

bridge就是H5页面获取的WebViewJavascriptBridge对象

bridge.callHandler("handler1","gift for handler1",function(responseData){
        console.log("got handler1 response:"+responseData);
    });

Native处理H5发来的消息

Native发送消息到H5

H5处理Native发来的消息

Native的js代码处理,找到H5代码注册的那个Handler回调方法,回调回去,即可处理消息。</br>

WebViewJavascriptBridge.js

function _dispatchMessageFromJava(messageJSON) {
        var message = JSON.parse(messageJSON);
        var messageHandler;
        
        if (message.responseId) {
            var responseCallback = responseCallbacks[message.responseId];
            if (!responseCallback) { return; }
            responseCallback(message.responseData);
            delete responseCallbacks[message.responseId]
        } else {
            var responseCallback;
            if (message.callbackId) {
                var callbackResponseId = message.callbackId;
                responseCallback = function(responseData) {
                    _doSend({ responseId:callbackResponseId, responseData:responseData })
                }
            }
            
            var handler = WebViewJavascriptBridge._messageHandler;
            if (message.handlerName) {
                handler = messageHandlers[message.handlerName]
            }
            try {
                handler(message.data, responseCallback)
            } catch(exception) {
                if (typeof console != 'undefined') {
                    console.log("WebViewJavascriptBridge: WARNING: javascript handler threw."+ exception)
                }
            }
        }
}

html中方法

bridge.registerHandler("showAlert", function(data) { console.log("alert:"+data); });
上一篇 下一篇

猜你喜欢

热点阅读