Android和js程式碼互相呼叫
阿新 • • 發佈:2019-01-31
在js中,有如下程式碼:
<script>
//js呼叫安卓
function sendDataToAndroid(){
//呼叫android程式中的方法,並傳遞引數。
var name = document.getElementById("name_input").value;
//注意這裡的AndroidWebView和方法名chen
window.AndroidWebView.chen(name);
}
//在android程式碼中呼叫js程式碼
function dataFromAndroid(msg){
alert("來自安卓的資訊:" +msg);
}
</script>
1、在js中呼叫安卓的話,安卓中寫法:
webView.addJavascriptInterface(new JsInterface_2(context), "AndroidWebView");
private class JsInterface_2 {
private Context mContext;
public JsInterface_2(Context context) {
this.mContext = context;
}
//在js中呼叫window.AndroidWebView.chen(name),便會觸發此方法。
@JavascriptInterface
public void chen(String name) {
Log.e("name==" ,name);
}
}
2、安卓呼叫js中方法,給js傳值
注:這個方法要等網頁載入完,才有效。所以,要麼在網頁載入完的監聽裡呼叫,要麼,寫一個點選事件,等載入完了點選呼叫
傳單個值及多個值,見註釋
//網頁返回鍵的處理
webView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK) { //表示按返回鍵時的操作
if (webView.canGoBack()) {
webView.goBack(); //後退
} else {
//所在activity銷燬
finish();
}
return true; //已處理
}
}
return false;
}
});
webView.setWebViewClient(new MyWebViewClient());
webView.setWebChromeClient(new MyChromeClient());
private class MyChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
@Override
public void onReceivedTitle(WebView view, String title) {
// TODO Auto-generated method stub
super.onReceivedTitle(view, title);
LogU.i("網頁title-----" , title);
}
}
// webview設定的代理類
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
Log.i("詳情頁載入完成-----" , url);
//呼叫js中的程式碼,給網頁傳使用者id
//傳多個值的方法。注意單引號的配對
//webView.loadUrl("javascript:dataFromAndroid('" + userInfo.getUserId()+"','"+userInfo.getUserId() + "')");
//傳單個值
webView.loadUrl("javascript:dataFromAndroid('" + userInfo.getUserId() + "')");
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.i("詳情頁開始載入-----" ,url);
super.onPageStarted(view, url, favicon);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.i("詳情頁載入異常-----" , failingUrl);
super.onReceivedError(view, errorCode, description, failingUrl);
}
}