<html> <script language="javascript"> <!-- Java调用JS方法 --> function JsCalledByJava() { alert("JS被调用"); } </script> <body> 网页内容 <input type="button" value="调用Java方法" onclick="window.js_tag.javaCalledByJS('Java被调用');" /> </body> </html>
当按钮被点击时,下面这个方法被调用,打印传进来的参数并调用JS方法JsCalledByJava
webView.addJavascriptInterface(new Object() { @JavascriptInterface public void javaCalledByJS(final String msg) { System.out.println(msg); webView.loadUrl("javascript:JsCalledByJava()"); } }, "js_tag");
当JsCalledByJava被调用时,执行alert()函数。alert操作被onJsAlert回调,并用原生的AlertDialog显示提示信息
webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { new AlertDialog.Builder(MainActivity.this) .setTitle("JS提示") .setMessage(message) .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(); } }).setCancelable(false).create().show(); return true; } });
完整的Activity如下:
public class MainActivity extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webview); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); webView.addJavascriptInterface(new Object() { @JavascriptInterface public void javaCalledByJS(final String msg) { System.out.println(msg); webView.loadUrl("javascript:JsCalledByJava()"); } }, "js_tag"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { super.shouldOverrideUrlLoading(view, url); view.loadUrl(url); return true; } }); webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { new AlertDialog.Builder(MainActivity.this) .setTitle("JS提示") .setMessage(message) .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(); } }).setCancelable(false).create().show(); return true; } }); webView.loadUrl("file:///android_asset/js_test.html"); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (webView.canGoBack()) { webView.goBack(); } else { finish(); } return true; } return super.onKeyDown(keyCode, event); } @Override protected void onDestroy() { super.onDestroy(); if (webView != null) { webView.clearCache(true); } } }