當時業務的需求是這樣的,H5有一個活動商品列表的界面,IOS和Android共用這一個界面,點擊商品可以跳轉到Android原生的商品詳情界面並傳遞商品ID; 大概就是點擊H5界面跳轉到Android原生界面;
好了,需求已經分析完畢了,Android只需要獲取H5的點擊事件和傳遞的參數;
來,上代碼:
/啟用支持javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
Android4.2以上需要@JavascriptInterface注解,其目的是為了安全;
public class JavaScriptObject{
public JavaScriptObject(Activity activity) {
}
@JavascriptInterface
public void setToken(String token){
//token就是商品的ID,這里拿到商品的ID后直接跳轉到商品詳情頁,並把id傳遞過去
}
@JavascriptInterface
public void definedShare(String ShareJson){
}
}
/*
*添加js接口,參數1是本地類名,參數2是標記;H5調用需要 "window.標記.類名中的方法名" 才能調用
*/
webView.addJavascriptInterface(new JavaScriptObject(this), "android");
到這里Android端需要寫的就完成了;
這個是我截的圖,可以看一下:
這里是H5需要寫的代碼:
<script type="text/javascript">
function s(){
//調用Android的setToken()方法
var result =window.android.setToken(goodsId);
document.getElementById("p").innerHTML=result;
}
</script>
----------------------------------------------------------------------------------------------------------------------------------
附:如果在Android端調用H5中的方法:
/*
* Android調用H5中的方法
*/
//傳固定字符串可以直接用單引號括起來
mWebView.loadUrl("javascript:alertMessage('哈哈')");//訪問H5里帶參數的方法,alertMessage(message)為H5里的方法
//當出入變量名時,需要用轉義符隔開
String content="1016";
mWebView.loadUrl("javascript:alertMessage(\"" +content+ "\")" );
//Android調用有返回值js方法,安卓4.4以上才能用這個方法
mWebView.evaluateJavascript("11", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.i(TAG, "js返回的結果為=" + value);
}
});
抽成方法:
private void callJS(String callback, String status) {
if (TextUtils.isEmpty(status)) {
if (AndroidUtils.isKitkat()) {
mWebView.evaluateJavascript("javascript:" + callback + "()", null);
} else {
mWebView.loadUrl("javascript:" + callback + "()");
}
} else {
if (AndroidUtils.isKitkat()) {
mWebView.evaluateJavascript("javascript:" + callback + "('" + status + "')", null);
} else {
mWebView.loadUrl("javascript:" + callback + "('" + status + "')");
}
}
}