基于lzyzsd的JsBridge優(yōu)化改進而來的Android JsBridge妨蛹。
優(yōu)化
1.支持自定義橋名;
2.修復(fù)web頁未渲染即進行跳轉(zhuǎn)導(dǎo)致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:如需使用自定義橋名,調(diào)用以下方法即可炒考,
// 傳空或不調(diào)用setCustom方法即使用默認橋名可缚。
// 默認橋名:WebViewJavascriptBridge
webView.setCustom("TestJavascriptBridge");
Android上使用方法
注冊一個handler方法供Js調(diào)用
webView.registerHandler("initSignNetPay", new BridgeHandler() {
@Override
public void handler(String data, CallBackFunction function) {
Log.i(TAG, "回傳結(jié)果:" + data);
Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();
}
});
Java里調(diào)用Js里的handler方法
webView.callHandler("click1", "success", new CallBackFunction() {
@Override
public void onCallBack(String data) {
Log.i(TAG, "回傳結(jié)果:" + 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上使用方法
構(gòu)建橋連接
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));
});
},
};
調(diào)用Android上的handler方法
function click1(){
var objData = new datas();
var payData = objData.click1;
try {
cmbMerchantBridge.initSignNet(payData, "initSignNetPay");
} catch (ex) { }
}
JavaScript里注冊一個handler方法供Android調(diào)用
/*app native調(diào)用本頁面方法*/
connectMerchantJSBridge(function(bridge) {
bridge.init(function(message, responseCallback) {
});
bridge.registerHandler("click1", function(data, responseCallback) {
responseCallback("receive click1");
//可以在下面執(zhí)行操作
});
})
window.cmbMerchantBridge = cmbMerchantBridge;
License
This project is licensed under the terms of the MIT license.