Android-使用JsBridge来优化js与本地webview的交互

基于lzyzsd的JsBridge 优化改进而来的Android JsBridge。

工程传送门

优化

1.支持自定义桥名;
2.修复web页未渲染即进行跳转导致Js桥初始化失败的问题;

使用

添加maven依赖

<dependency>
  <groupId>com.hjhrq1991.library</groupId>
  <artifactId>jsbridge</artifactId>
  <version>1.0.5</version>
  <type>pom</type>
</dependency>

添加gradle依赖

compile 'com.hjhrq1991.library:jsbridge:1.0.5'

在你的布局上添加BridgeWebView

<com.hjhrq1991.library.BridgeWebView
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

使用默认桥名或自定义桥名

//description:如需使用自定义桥名,调用以下方法即可,
// 传空或不调用setCustom方法即使用默认桥名。
// 默认桥名:WebViewJavascriptBridge
webView.setCustom("TestJavascriptBridge");

Android上使用方法

注册一个handler方法供Js调用

webView.registerHandler("initSignNetPay", new BridgeHandler() {
    @Override
    public void handler(String data, CallBackFunction function) {
        Log.i(TAG, "回传结果:" + data);
        Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();
    }
});

Java里调用Js里的handler方法

webView.callHandler("click1", "success", new CallBackFunction() {
    @Override
    public void onCallBack(String data) {
        Log.i(TAG, "回传结果:" + data);
        Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();
    }
});

使用默认handler方法来进行交互

webView.setDefaultHandler(new DefaultHandler());
window.WebViewJavascriptBridge.send(
    data, function(responseData) {
        document.getElementById("show").innerHTML = "repsonseData from java, data = " + responseData
    }
);

JavaScript上使用方法

构建桥连接

var default_data = {
    error: "1"
};
var connectMerchantJSBridge = function (callback) {
    try {
        if (window.WebViewJavascriptBridge) {
            callback(WebViewJavascriptBridge);
        } else {
            document.addEventListener("WebViewJavascriptBridgeReady", function () {
                callback(WebViewJavascriptBridge);
            }, false);
        }
    } catch (ex) { }
};
var cmbMerchantBridge = {
    initSignNet: function (payData,name) {
        if (!payData) {
            payData = default_data;
        }
        connectMerchantJSBridge(function (bridge) {
            if (typeof bridge === "undefined") {
                return;
            }
        bridge.callHandler(name, JSON.stringify(payData));
        });
    },
};

调用Android上的handler方法

function click1(){
    var objData = new datas();
    var payData = objData.click1;
    try {
        cmbMerchantBridge.initSignNet(payData, "initSignNetPay");
    } catch (ex) { }
}

JavaScript里注册一个handler方法供Android调用

/*app native调用本页面方法*/
connectMerchantJSBridge(function(bridge) {
    bridge.init(function(message, responseCallback) {
    });
    bridge.registerHandler("click1", function(data, responseCallback) {
        responseCallback("receive click1");
        //可以在下面执行操作
    });
})
window.cmbMerchantBridge = cmbMerchantBridge;

原文链接:http://hjhrq1991.info/2016/08/22/JsBridge/

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值