js示例代码,放在assets文件内 文件名javascript.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Carson_Ho</title>
<body>
我是body
</body>
<script>
function callJS(){
alert("Android调用了JS的callJS方法 实现‘webView.setWebChromeClient’才有响应");
}
</script>
</head>
</html>
1. 通过WebView的loadUrl()
可以显示web界面,也可以执行web界面的js方法代码。
传值方式:
String url = "javascript:" + methodName + "(" + jsonParams + ");
webView.loadUrl(url);
示例:
public class MainActivity extends AppCompatActivity {
public static final String TAG = MainActivity.class.getSimpleName();
WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initJs();
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webview.loadUrl("javascript:callJS()");//-------------------调用web界面的js方法代码
}
});
}
public void initJs() {
webview = findViewById(R.id.webview);
webview.loadUrl("file:///android_asset/javascript.html");//-------------------调用web界面
// 由于设置了弹窗检验调用结果,所以需要支持js对话框
// webview只是载体,内容的渲染需要使用webviewChromClient类去实现
// 通过设置WebChromeClient对象处理JavaScript的对话框
//设置响应js 的Alert()函数
webview.setWebChromeClient(new WebChromeClient() {
@Override//-------------------调用web界面的js方法代码执行回调(需要js的alert)
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
Log.v(TAG,url + " "+ message + " "+ result);
AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this);
b.setTitle("Alert");
b.setMessage(message);
b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
});
b.setCancelable(false);
b.create().show();
return true;
}
});
}
}
注意:JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用,该回调是监听页面加载结束的。
2. 通过WebView的evaluateJavascript()
示例:
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// //-------------------调用web界面的js方法代码,该方要求api level 19以上才可以调用
webview.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.v(TAG,value);//此处为 js 返回的结果
}
});
}
});
该方式要求api level 19 两种方式权衡使用
网友评论