Skip to content

403462630/JsBridge

Repository files navigation

JsBridge

JsBridge的主要功能是实现javascript和android native代码的相互调用

由于android4.2以下webview 的 addJavascriptInterface方法存在安全隐患,所以本项目提供了两种实现方式,android4.2以下使用IFrame实现,android4.2及以上使用webView自带的addJavascriptInterface实现

1、Android Native 代码用法有两种 直接使用JsBridgeWebView

<fc.com.jsbridge.library.JsBridgeWebView
  android:id="@+id/web_view"
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>

或者使用WebViewJavascriptBridge

WebViewJavascriptBridge bridge = new WebViewJavascriptBridge(WebView);
......//直接使用WebViewJavascriptBridge提供的方法进行操作

2、JavaScript中的用法

//此处主要是为了确保JsBridge对象存在并且进行一些必要的初始化操作
function connectWebViewJavascriptBridge() {
    if (window.JsBridge) {
        ......//对JsBridge对象进行一些初始化操作
    } else {
        document.addEventListener('JsBridgeReady', function() {
            ......//对JsBridge对象进行一些初始化操作
        },
        false)
    }
}
connectWebViewJavascriptBridge();

3、最后就调用各自的api进行交互 JsBridgeWebView 或 WebViewJavascriptBridge提供了如下api:

public void registerHandler(String handlerName, Bridge.BridgeHandler bridgeHandler) {
    bridge.registerHandler(handlerName, bridgeHandler);
}

public void registerDefaultHandler(Bridge.BridgeHandler bridgeHandler) {
    bridge.registerDefaultHandler(bridgeHandler);
}

public void send(String data) {
    send(data, null);
}

public void send(String data, ResponseCallback responseCallback) {
    bridge.send(data, responseCallback, null);
}

public void callHandler(String data, ResponseCallback callBack, String handlerName) {
    bridge.send(data, callBack, handlerName);
}

javascript 中JsBridge提供了如下用法:

//init方法是非必须的,并且只能调用一次
JsBridge.init(function(message, responseCallback) {...})
JsBridge.registerHandler("testHandler", function(data, responseCallback) {...});
JsBridge.callHandler('testHandlder', {
      'param': 'str1',
  },
  function(responseData) {
      alert(responseData);
  });
JsBridge.fireEvent('testHandlder', {
      'param': 'str1',
  },
  function(responseData) {
      alert(responseData);
  });
window.JsBridge.send(data, function(responseData) {
    alert(responseData);
});

如果你的WebView需要设置WebViewClient或WebChromeClient的话,请使用BridgeWebViewClient或BridgeWebChromeClient

this.webView.setWebViewClient(new Bridge.BridgeWebViewClient(WebViewJavascriptBridge){
  ...//重写你需要的方法
});
this.webView.setWebChromeClient(new Bridge.BridgeWebChromeClient(){
  ...//重写你需要的方法
});

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published