基礎(chǔ)知識(shí)
WebView 官網(wǎng)介紹:
https://developer.android.com/guide/webapps/webview#java
Android WebView基本使用方法 介紹:
Android:這是一份全面 & 詳細(xì)的Webview使用攻略
http://www.reibang.com/p/3c94ae673e2a
官方指南介紹的方法 :
在 WebView 中使用 JavaScript
如果您打算在 WebView中加載的網(wǎng)頁(yè)使用 JavaScript彤蔽,則必須為您的 啟用 JavaScript杆煞。
啟用 JavaScript 后势决,您還可以在應(yīng)用代碼和 JavaScript 代碼之間創(chuàng)建接口谍婉。
啟用 JavaScript
JavaScript 在 WebView 中默認(rèn)處于停用狀態(tài)蝗岖。
您可以通過(guò)附加到 WebView 的 WebSettings啟用 JavaScript。
您也可以使用 getSettings() 檢索 WebSettings债鸡,然后使用 setJavaScriptEnabled() 啟用 JavaScript捌木。
例如:
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
WebSettings 提供對(duì)其他各種實(shí)用設(shè)置的訪問(wèn)權(quán)限。
例如焕窝,如果您正在開(kāi)發(fā)專為 Android 應(yīng)用中的 WebView 設(shè)計(jì)的 Web 應(yīng)用蹬挺,則可以使用 setUserAgentString() 定義自定義用戶代理字符串,
然后在網(wǎng)頁(yè)中查詢自定義用戶代理它掂,以驗(yàn)證請(qǐng)求網(wǎng)頁(yè)的客戶端實(shí)際上是您的 Android 應(yīng)用巴帮。
將 JavaScript 代碼綁定到 Android 代碼
在開(kāi)發(fā)專為 Android 應(yīng)用中的 WebView 設(shè)計(jì)的 Web 應(yīng)用時(shí),您可以在 JavaScript 代碼和客戶端 Android 代碼之間創(chuàng)建接口虐秋。
例如榕茧,您的 JavaScript 代碼可以調(diào)用 Android 代碼中的方法(而不是使用 JavaScript 的 alert() 函數(shù))來(lái)顯示 Dialog。
要綁定 JavaScript 代碼與 Android 代碼之間的新接口客给,請(qǐng)調(diào)用 addJavascriptInterface()用押,并傳入類實(shí)例以綁定到 JavaScript 以及 JavaScript 可調(diào)用以訪問(wèn)類的接口名稱。
例如靶剑,您可以在 Android 應(yīng)用中包含以下類:
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) { mContext = c; }
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
注意:如果您將 targetSdkVersion
設(shè)置為 17 或更高蜻拨,則必須向您希望 JavaScript(此方法也必須為公開(kāi)方法)可用的任何方法添加 @JavascriptInterface
注釋池充。
如果您未提供注釋,那么在 Android 4.2 或更高版本的平臺(tái)上運(yùn)行時(shí)您的網(wǎng)頁(yè)將無(wú)法訪問(wèn)該方法缎讼。
在此示例中收夸,WebAppInterface
類允許網(wǎng)頁(yè)使用 showToast()
方法創(chuàng)建 Toast 消息。
您可以使用 addJavascriptInterface() 將此類綁定到在 WebView 中運(yùn)行的 JavaScript休涤,并為接口 Android
命名咱圆。例如:
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
這會(huì)為在 WebView 中運(yùn)行的 JavaScript 創(chuàng)建名為 Android
的接口。此時(shí)功氨,您的 Web 應(yīng)用可以訪問(wèn) WebAppInterface
類序苏。
例如,以下是用于在用戶點(diǎn)擊按鈕時(shí)使用新接口創(chuàng)建提示消息的 HTML 和 JavaScript:
<input type="button" value="Say hello"
onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast) {
Android.showToast(toast); }
</script>
無(wú)需從 JavaScript 初始化 Android
接口捷凄。
WebView 會(huì)自動(dòng)將其提供給您的網(wǎng)頁(yè)忱详。
因此,點(diǎn)擊此按鈕后跺涤,showAndroidToast()
函數(shù)會(huì)使用 Android
接口調(diào)用 WebAppInterface.showToast()
方法匈睁。
注意:綁定到 JavaScript 的對(duì)象在另一個(gè)線程中運(yùn)行,而不是在構(gòu)造它的線程中運(yùn)行桶错。
注意:使用 addJavascriptInterface() 可讓 JavaScript 控制您的 Android 應(yīng)用航唆。這可能是非常實(shí)用的功能,也可能會(huì)造成危險(xiǎn)的安全問(wèn)題院刁。
如果 WebView中的 HTML 不可信(例如糯钙,部分或全部 HTML 由未知人員或進(jìn)程提供),則攻擊者可以包含執(zhí)行客戶端代碼的 HTML退腥,并且可能包含攻擊者選擇的任何代碼任岸。
因此,除非您編寫了在WebView 中顯示的所有 HTML 和 JavaScript狡刘,否則請(qǐng)不要使用 addJavascriptInterface()享潜。
您也不應(yīng)允許用戶在您的 WebView內(nèi)導(dǎo)航到并非您自己的其他網(wǎng)頁(yè)
(而應(yīng)允許用戶的默認(rèn)瀏覽器應(yīng)用打開(kāi)外部鏈接嗅蔬,默認(rèn)情況下剑按,用戶的網(wǎng)絡(luò)瀏覽器會(huì)打開(kāi)所有網(wǎng)址鏈接,因此吕座,請(qǐng)務(wù)必謹(jǐn)慎處理網(wǎng)頁(yè)導(dǎo)航)。