<uses-permission android:name="android.permission.INTERNET" />
WebView.loadUrl("http://www.baidu.com");
http://
,省略的话,某些ROM中的WebView会加载失败WebView.loadUrl("file:///android_asset/xxx.html")
WebView.loadUrl("javascript:" + ${js_code})
以下,提供一个showToast的方法给javascript private static class JavaJs { private Context context; JavaJs(Context context) { this.context = context; } @JavascriptInterface public void showToast(String str) { Toast.makeText(context, str, Toast.LENGTH_LONG).show(); } } webView.addJavascriptInterface(new JavaJs(this), "JavaJs"); <script type="text/javascript"> JavaJs.showToast("toast from js"); </script>
注意:javascript
public
的,不然js没法访问showToast
方法是没问题的)@JavascriptInterface
@JavascriptInterface
是在Api 17加上的,可是Api 17以前,咱们依然建议将提供给javascript的方法加上该annotation.(JSR-175规定,运行时annotation缺失,则直接忽略,而不会抛出ClassNotFoundException
)addJavascriptInterface
向javascript提供方法,而且经过removeJavascriptInterface("searchBoxJavaBridge_")
来移除WebView本身添加的java对象.webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals("www.xxx.com")) { // 本身的页面,直接使用WebView加载 return false; } // 别的公司的页面,使用浏览器打开 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } });
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); }
重写WebChromeClient中的onConsoleMessage方法 @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { Log.d("WebView", consoleMessage.message() + " js line: " + consoleMessage.lineNumber()); return true; }
alert
重写WebChromeClient中的onJsAlert方法 @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { new AlertDialog.Builder(MainActivity.this) .setTitle("JsAlert") .setMessage(message) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }) .setCancelable(false) .show(); return true; }
confirm
重写WebChromeClient中的onJsConfirm方法 @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { new AlertDialog.Builder(MainActivity.this) .setTitle("JsConfirm") .setMessage(message) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }) .setCancelable(false) .show(); return true; }
prompt
重写WebChromeClient中的onJsPrompt方法 @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { final EditText et = new EditText(MainActivity.this); et.setText(defaultValue); new AlertDialog.Builder(MainActivity.this) .setTitle(message) .setView(et) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(et.getText().toString()); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }) .setCancelable(false) .show(); return true; }
WebView.loadUrl("about:blank"); //该方法使得WebView只会绘制一个白色背景,而且释放以前加载页面时使用的资源,并中止以前javascript的执行
WebView.clearHistory
WebView.copyBackForwardList
WebView.setDownloadListener