<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