WebView使用詳解(一)——Native與JS相互呼叫(附JadX反編譯)
阿新 • • 發佈:2019-01-15
前言:念念不忘,必有迴響,永遠堅持你所堅持的!
一直在用WebView,還沒有系統的總結過它的用法,下面就係統的總結下,分享給大家
一、基本用法
1、載入線上URL
[java] view plain copy print?- void loadUrl(String url)
void loadUrl(String url)
這個函式主要載入url所對應的網頁地址,或者用於呼叫網頁中的指定的JS方法(呼叫js方法的用法,後面會講),但有一點必須注意的是:loadUrl()必須在主執行緒中執行!!!否則就會報錯!!!。注意:載入線上網頁地址是會用到聯網permission許可權的,所以需要在AndroidManifest.xml中寫入下面程式碼申請許可權:
[html] view plain copy print?
- <uses-permissionandroid:name=“android.permission.INTERNET”/>
<uses-permission android:name="android.permission.INTERNET" />
本示例效果為:從效果圖中可以明顯看出本示例的佈局:
main.xml
[html] view plain copy print?
- <?xmlversion=“1.0”encoding=“utf-8”?>
- <LinearLayoutxmlns:android=“http://schemas.android.com/apk/res/android”
- android:orientation=“vertical”
- android:layout_width=“fill_parent”
- android:layout_height=“fill_parent”
- >
- <Button
- android:id=“@+id/btn”
- android:layout_width=“match_parent”
- android:layout_height=“wrap_content”
- android:text
- <WebView
- android:id=“@+id/webview”
- android:layout_width=“match_parent”
- android:layout_height=“match_parent”/>
- </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="載入URL"/>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
對應的處理程式碼如下[java] view plain copy print?
- publicclass MyActivity extends Activity {
- private WebView mWebView;
- private Button mBtn;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mWebView = (WebView)findViewById(R.id.webview);
- mBtn = (Button)findViewById(R.id.btn);
- mBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- publicvoid onClick(View v) {
- mWebView.loadUrl(”http://www.baidu.com”);
- }
- });
- }
- }
public class MyActivity extends Activity {
private WebView mWebView;
private Button mBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView)findViewById(R.id.webview);
mBtn = (Button)findViewById(R.id.btn);
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWebView.loadUrl("http://www.baidu.com");
}
});
}
}
程式碼很簡單,就是在點選按鈕的時候載入網址,但需要注意的是:網址必須完整即以http://或者ftp://等協議開頭,不能省略!不然將載入不出來,這是因為webview是沒有自動補全協議功能的,所以如果我們不加,它將識別不出來網址型別,也就載入不出來了。 但如果我們執行上面的程式碼,效果卻是利用瀏覽器來開啟網址,卻不是使用webview開啟網址:
如果我們想實現像示例一樣在webview中開啟網址需要怎麼做呢?
我們需要設定WebViewClient:
修改後的程式碼為:
[java] view plain copy print?
- publicclass MyActivity extends Activity {
- private WebView mWebView;
- private Button mBtn;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mWebView = (WebView)findViewById(R.id.webview);
- mBtn = (Button)findViewById(R.id.btn);
- mWebView.setWebViewClient(new WebViewClient());
- mBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- publicvoid onClick(View v) {
- mWebView.loadUrl(”http://www.baidu.com”);
- }
- });
- }
- }
public class MyActivity extends Activity {
private WebView mWebView;
private Button mBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView)findViewById(R.id.webview);
mBtn = (Button)findViewById(R.id.btn);
mWebView.setWebViewClient(new WebViewClient());
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWebView.loadUrl("http://www.baidu.com");
}
});
}
}
在上面的基礎上,我們添加了下面一段程式碼:[java] view plain copy print?
- mWebView.setWebViewClient(new WebViewClient());
mWebView.setWebViewClient(new WebViewClient());
在這裡我們利用mWebView.setWebViewClient()函式僅僅設定了一個WebViewClient例項,就可以實現在WebView中開啟連結了,至於原因我們下篇會講到,這裡就先忽略了,大家只需要知道要在WebView中開啟連結,就必須要設定WebViewClient; 最終的效果圖就與開篇時一樣的了,這裡就不再帖效果圖了,下面我們來看看如何載入本地html網頁
原始碼在文章底部給出
2、載入本地URL
一般而言,我們會將本地html檔案放在assets資料夾下,比如:
web.html的內容為:
- <!DOCTYPE html>
- <htmllang=“en”>
- <head>
- <metacharset=“UTF-8”>
- <title>Title</title>
- <h1>歡迎光臨啟艦的blog</h1>
- </head>
- <body>
- </body>
- </html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<h1>歡迎光臨啟艦的blog</h1>
</head>
<body>
</body>
</html>
即大標題顯示一段文字 我們同樣在上面的示例的基礎上加以改造,在點選按鈕的時候載入本地web.html檔案
[java] view plain copy print?
- publicclass MyActivity extends Activity {
- private WebView mWebView;
- private Button mBtn;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mWebView = (WebView)findViewById(R.id.webview);
- mBtn = (Button)findViewById(R.id.btn);
- mBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- publicvoid onClick(View v) {
- mWebView.loadUrl(”file:///android_asset/web.html”);
- }
- });
- }
- }
public class MyActivity extends Activity {
private WebView mWebView;
private Button mBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView)findViewById(R.id.webview);
mBtn = (Button)findViewById(R.id.btn);
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWebView.loadUrl("file:///android_asset/web.html");
}
});
}
}
從這裡可以看到與載入線上URL有兩點不同: 1、URL型別不一樣
在載入本地URL時,是以“file:///”開頭的,而assets目錄所對應的路徑名為anroid_asset,寫成其它的將識別不了,這是assets目錄的以file開頭的url形式的固定訪問形式。
2、不需要設定WebViewClient
這裡很明顯沒有設定WebViewClient函式,但仍然是在webview中開啟的本地檔案。具體原因下篇文章講到WebViewClient時我們會具體解釋。
本例效果圖如下:
所以對於載入URL的總結就是:
1、如果是線上網址記得新增網路訪問許可權
2、線上網址中,如果要使用webview開啟,記得設定WebViewClient
3、開啟本地html檔案時,是不需要設定WebViewClient,對應的asstes目錄的url為:file:///android_asset/xxxxx
3、WebView基本設定
如果我們需要設定WebView的屬性,是通過WebView.getSettings()獲取設定WebView的WebSettings物件,然後呼叫WebSettings中的方法來實現的。WebSettings的方法及說明如下:(這裡先列出來所有的方法及解釋,大家可以先忽略,看後面的舉例中所使用的幾個常用方法即可,用到哪個函式的時候再回來查查就可以了)
[java] view plain copy print?
- /**
- * 是否支援縮放,配合方法setBuiltInZoomControls使用,預設true
- */
- setSupportZoom(boolean support)
- /**
- * 是否需要使用者手勢來播放Media,預設true
- */
- setMediaPlaybackRequiresUserGesture(boolean require)
- /**
- * 是否使用WebView內建的縮放元件,由浮動在視窗上的縮放控制和手勢縮放控制組成,預設false
- */
- setBuiltInZoomControls(boolean enabled)
- /**
- * 是否顯示視窗懸浮的縮放控制,預設true
- */
- setDisplayZoomControls(boolean enabled)
- /**
- * 是否允許訪問WebView內部檔案,預設true
- */
- setAllowFileAccess(boolean allow)
- /**
- * 是否允許獲取WebView的內容URL ,可以讓WebView訪問ContentPrivider儲存的內容。 預設true
- */
- setAllowContentAccess(boolean allow)
- /**
- * 是否啟動概述模式瀏覽介面,當頁面寬度超過WebView顯示寬度時,縮小頁面適應WebView。預設false
- */
- setLoadWithOverviewMode(boolean overview)
- /**
- * 是否儲存表單資料,預設false
- */
- setSaveFormData(boolean save)
- /**
- * 設定頁面文字縮放百分比,預設100%
- */
- setTextZoom(int textZoom)
- /**
- * 是否支援ViewPort的meta tag屬性,如果頁面有ViewPort meta tag 指定的寬度,則使用meta tag指定的值,否則預設使用寬屏的檢視視窗
- */
- setUseWideViewPort(boolean use)
- /**
- * 是否支援多視窗,如果設定為true ,WebChromeClient#onCreateWindow方法必須被主程式實現,預設false
- */
- setSupportMultipleWindows(boolean support)
- /**
- * 指定WebView的頁面佈局顯示形式,呼叫該方法會引起頁面重繪。預設LayoutAlgorithm#NARROW_COLUMNS
- */
- setLayoutAlgorithm(LayoutAlgorithm l)
- /**
- * 設定標準的字型族,預設”sans-serif”。font-family 規定元素的字體系列。
- * font-family 可以把多個字型名稱作為一個“回退”系統來儲存。如果瀏覽器不支援第一個字型,
- * 則會嘗試下一個。也就是說,font-family 屬性的值是用於某個元素的字型族名稱或/及類族名稱的一個
- * 優先表。瀏覽器會使用它可識別的第一個值。
- */
- setStandardFontFamily(String font)
- /**
- * 設定混合字型族。預設”monospace”
- */
- setFixedFontFamily(String font)
- /**
- * 設定SansSerif字型族。預設”sans-serif”
- */
- setSansSerifFontFamily(String font)
- /**
- * 設定SerifFont字型族,預設”sans-serif”
- */
- setSerifFontFamily(String font)
- /**
- * 設定CursiveFont字型族,預設”cursive”
- */
- setCursiveFontFamily(String font)
- /**
- * 設定FantasyFont字型族,預設”fantasy”
- */
- setFantasyFontFamily(String font)
- /**
- * 設定最小字型,預設8. 取值區間[1-72],超過範圍,使用其上限值。
- */
- setMinimumFontSize(int size)
- /**
- * 設定最小邏輯字型,預設8. 取值區間[1-72],超過範圍,使用其上限值。
- */
- setMinimumLogicalFontSize(int size)
- /**
- * 設定預設字型大小,預設16,取值區間[1-72],超過範圍,使用其上限值。
- */
- setDefaultFontSize(int size)
- /**
- * 設定預設填充字型大小,預設16,取值區間[1-72],超過範圍,使用其上限值。
- */
- setDefaultFixedFontSize(int size)
- /**
- * 設定是否載入圖片資源,注意:方法控制所有的資源圖片顯示,包括嵌入的本地圖片資源。
- * 使用方法setBlockNetworkImage則只限制網路資源圖片的顯示。值設定為true後,
- * webview會自動載入網路圖片。預設true
- */
- setLoadsImagesAutomatically(boolean flag)
- /**
- * 是否載入網路圖片資源。注意如果getLoadsImagesAutomatically返回false,則該方法沒有效果。
- * 如果使用setBlockNetworkLoads設定為false,該方法設定為false,也不會顯示網路圖片。
- * 當值從true改為false時。WebView會自動載入網路圖片。
- */
- setBlockNetworkImage(boolean flag)
- /**
- * 設定是否載入網路資源。注意如果值從true切換為false後,WebView不會自動載入,
- * 除非呼叫WebView#reload().如果沒有android.Manifest.permission#INTERNET許可權,
- * 值設為false,則會丟擲java.lang.SecurityException異常。
- * 預設值:有android.Manifest.permission#INTERNET許可權時為false,其他為true。
- */
- setBlockNetworkLoads(boolean flag)
- /**
- * 設定是否允許執行JS。
- */
- setJavaScriptEnabled(boolean flag)
- /**
- * 是否允許Js訪問任何來源的內容。包括訪問file scheme的URLs。考慮到安全性,
- * 限制Js訪問範圍預設禁用。注意:該方法隻影響file scheme型別的資源,其他型別資源如圖片型別的,
- * 不會受到影響。ICE_CREAM_SANDWICH_MR1版本以及以下預設為true,JELLY_BEAN版本
- * 以上預設為false
- */
- setAllowUniversalAccessFromFileURLs(boolean flag)
- /**
- * 是否允許Js訪問其他file scheme的URLs。包括訪問file scheme的資源。考慮到安全性,
- * 限制Js訪問範圍預設禁用。注意:該方法隻影響file scheme型別的資源,其他型別資源如圖片型別的,
- * 不會受到影響。如果getAllowUniversalAccessFromFileURLs為true,則該方法被忽略。
- * ICE_CREAM_SANDWICH_MR1版本以及以下預設為true,JELLY_BEAN版本以上預設為false
- */
- setAllowFileAccessFromFileURLs(boolean flag)
- /**
- * 設定儲存定位資料庫的位置,考慮到位置許可權和持久化Cache快取,Application需要擁有指定路徑的
- * write許可權
- */
- setGeolocationDatabasePath(String databasePath)
- /**
- * 是否允許Cache,預設false。考慮需要儲存快取,應該為快取指定儲存路徑setAppCachePath
- */
- setAppCacheEnabled(boolean flag)
- /**
- * 設定Cache API快取路徑。為了保證可以訪問Cache,Application需要擁有指定路徑的write許可權。
- * 該方法應該只調用一次,多次呼叫自動忽略。
- */
- setAppCachePath(String appCachePath)
- /**
- * 是否允許資料庫儲存。預設false。檢視setDatabasePath API 如何正確設定資料庫儲存。
- * 該設定擁有全域性特性,同一程序所有WebView例項共用同一配置。注意:保證在同一程序的任一WebView
- * 載入頁面之前修改該屬性,因為在這之後設定WebView可能會忽略該配置
- */
- setDatabaseEnabled(boolean flag)
- /**
- * 是否儲存頁面DOM結構,預設false。
- */
- setDomStorageEnabled(boolean flag)
- /**
- * 是否允許定位,預設true。注意:為了保證定位可以使用,要保證以下幾點:
- * Application 需要有android.Manifest.permission#ACCESS_COARSE_LOCATION的許可權
- * Application 需要實現WebChromeClient#onGeolocationPermissionsShowPrompt的回撥,
- * 接收Js定位請求訪問地理位置的通知
- */
- setGeolocationEnabled(boolean flag)
- /**
- * 是否允許JS自動開啟視窗。預設false
- */
- setJavaScriptCanOpenWindowsAutomatically(boolean flag)
- /**
- * 設定頁面的編碼格式,預設UTF-8
- */
- setDefaultTextEncodingName(String encoding)
- /**
- * 設定WebView代理,預設使用預設值
- */
- setUserAgentString(String ua)
- /**
- * 通知WebView是否需要設定一個節點獲取焦點當
- * WebView#requestFocus(int,android.graphics.Rect)被呼叫的時候,預設true
- */
- setNeedInitialFocus(boolean flag)
- /**
- * 基於WebView導航的型別使用快取:正常頁面載入會載入快取並按需判斷內容是否需要重新驗證。
- * 如果是頁面返回,頁面內容不會重新載入,直接從快取中恢復。setCacheMode允許客戶端根據指定的模式來
- * 使用快取。
- * LOAD_DEFAULT 預設載入方式
- * LOAD_CACHE_ELSE_NETWORK 按網路情況使用快取
- * LOAD_NO_CACHE 不使用快取
- * LOAD_CACHE_ONLY 只使用快取
- */
- setCacheMode(int mode)
- /**
- * 設定載入不安全資源的WebView載入行為。KITKAT版本以及以下預設為MIXED_CONTENT_ALWAYS_ALLOW方
- * 式,LOLLIPOP預設MIXED_CONTENT_NEVER_ALLOW。強烈建議:使用MIXED_CONTENT_NEVER_ALLOW
- */
- setMixedContentMode(int mode)
/**
* 是否支援縮放,配合方法setBuiltInZoomControls使用,預設true
*/
setSupportZoom(boolean support)
/**
* 是否需要使用者手勢來播放Media,預設true
*/
setMediaPlaybackRequiresUserGesture(boolean require)
/**
* 是否使用WebView內建的縮放元件,由浮動在視窗上的縮放控制和手勢縮放控制組成,預設false
*/
setBuiltInZoomControls(boolean enabled)
/**
* 是否顯示視窗懸浮的縮放控制,預設true
*/
setDisplayZoomControls(boolean enabled)
/**
* 是否允許訪問WebView內部檔案,預設true
*/
setAllowFileAccess(boolean allow)
/**
* 是否允許獲取WebView的內容URL ,可以讓WebView訪問ContentPrivider儲存的內容。 預設true
*/
setAllowContentAccess(boolean allow)
/**
* 是否啟動概述模式瀏覽介面,當頁面寬度超過WebView顯示寬度時,縮小頁面適應WebView。預設false
*/
setLoadWithOverviewMode(boolean overview)
/**
* 是否儲存表單資料,預設false
*/
setSaveFormData(boolean save)
/**
* 設定頁面文字縮放百分比,預設100%
*/
setTextZoom(int textZoom)
/**
* 是否支援ViewPort的meta tag屬性,如果頁面有ViewPort meta tag 指定的寬度,則使用meta tag指定的值,否則預設使用寬屏的檢視視窗
*/
setUseWideViewPort(boolean use)
/**
* 是否支援多視窗,如果設定為true ,WebChromeClient#onCreateWindow方法必須被主程式實現,預設false
*/
setSupportMultipleWindows(boolean support)
/**
* 指定WebView的頁面佈局顯示形式,呼叫該方法會引起頁面重繪。預設LayoutAlgorithm#NARROW_COLUMNS
*/
setLayoutAlgorithm(LayoutAlgorithm l)
/**
* 設定標準的字型族,預設”sans-serif”。font-family 規定元素的字體系列。
* font-family 可以把多個字型名稱作為一個“回退”系統來儲存。如果瀏覽器不支援第一個字型,
* 則會嘗試下一個。也就是說,font-family 屬性的值是用於某個元素的字型族名稱或/及類族名稱的一個
* 優先表。瀏覽器會使用它可識別的第一個值。
*/
setStandardFontFamily(String font)
/**
* 設定混合字型族。預設”monospace”
*/
setFixedFontFamily(String font)
/**
* 設定SansSerif字型族。預設”sans-serif”
*/
setSansSerifFontFamily(String font)
/**
* 設定SerifFont字型族,預設”sans-serif”
*/
setSerifFontFamily(String font)
/**
* 設定CursiveFont字型族,預設”cursive”
*/
setCursiveFontFamily(String font)
/**
* 設定FantasyFont字型族,預設”fantasy”
*/
setFantasyFontFamily(String font)
/**
* 設定最小字型,預設8. 取值區間[1-72],超過範圍,使用其上限值。
*/
setMinimumFontSize(int size)
/**
* 設定最小邏輯字型,預設8. 取值區間[1-72],超過範圍,使用其上限值。
*/
setMinimumLogicalFontSize(int size)
/**
* 設定預設字型大小,預設16,取值區間[1-72],超過範圍,使用其上限值。
*/
setDefaultFontSize(int size)
/**
* 設定預設填充字型大小,預設16,取值區間[1-72],超過範圍,使用其上限值。
*/
setDefaultFixedFontSize(int size)
/**
* 設定是否載入圖片資源,注意:方法控制所有的資源圖片顯示,包括嵌入的本地圖片資源。
* 使用方法setBlockNetworkImage則只限制網路資源圖片的顯示。值設定為true後,
* webview會自動載入網路圖片。預設true
*/
setLoadsImagesAutomatically(boolean flag)
/**
* 是否載入網路圖片資源。注意如果getLoadsImagesAutomatically返回false,則該方法沒有效果。
* 如果使用setBlockNetworkLoads設定為false,該方法設定為false,也不會顯示網路圖片。
* 當值從true改為false時。WebView會自動載入網路圖片。
*/
setBlockNetworkImage(boolean flag)
/**
* 設定是否載入網路資源。注意如果值從true切換為false後,WebView不會自動載入,
* 除非呼叫WebView#reload().如果沒有android.Manifest.permission#INTERNET許可權,
* 值設為false,則會丟擲java.lang.SecurityException異常。
* 預設值:有android.Manifest.permission#INTERNET許可權時為false,其他為true。
*/
setBlockNetworkLoads(boolean flag)
/**
* 設定是否允許執行JS。
*/
setJavaScriptEnabled(boolean flag)
/**
* 是否允許Js訪問任何來源的內容。包括訪問file scheme的URLs。考慮到安全性,
* 限制Js訪問範圍預設禁用。注意:該方法隻影響file scheme型別的資源,其他型別資源如圖片型別的,
* 不會受到影響。ICE_CREAM_SANDWICH_MR1版本以及以下預設為true,JELLY_BEAN版本
* 以上預設為false
*/
setAllowUniversalAccessFromFileURLs(boolean flag)
/**
* 是否允許Js訪問其他file scheme的URLs。包括訪問file scheme的資源。考慮到安全性,
* 限制Js訪問範圍預設禁用。注意:該方法隻影響file scheme型別的資源,其他型別資源如圖片型別的,
* 不會受到影響。如果getAllowUniversalAccessFromFileURLs為true,則該方法被忽略。
* ICE_CREAM_SANDWICH_MR1版本以及以下預設為true,JELLY_BEAN版本以上預設為false
*/
setAllowFileAccessFromFileURLs(boolean flag)
/**
* 設定儲存定位資料庫的位置,考慮到位置許可權和持久化Cache快取,Application需要擁有指定路徑的
* write許可權
*/
setGeolocationDatabasePath(String databasePath)
/**
* 是否允許Cache,預設false。考慮需要儲存快取,應該為快取指定儲存路徑setAppCachePath
*/
setAppCacheEnabled(boolean flag)
/**
* 設定Cache API快取路徑。為了保證可以訪問Cache,Application需要擁有指定路徑的write許可權。
* 該方法應該只調用一次,多次呼叫自動忽略。
*/
setAppCachePath(String appCachePath)
/**
* 是否允許資料庫儲存。預設false。檢視setDatabasePath API 如何正確設定資料庫儲存。
* 該設定擁有全域性特性,同一程序所有WebView例項共用同一配置。注意:保證在同一程序的任一WebView
* 載入頁面之前修改該屬性,因為在這之後設定WebView可能會忽略該配置
*/
setDatabaseEnabled(boolean flag)
/**
* 是否儲存頁面DOM結構,預設false。
*/
setDomStorageEnabled(boolean flag)
/**
* 是否允許定位,預設true。注意:為了保證定位可以使用,要保證以下幾點:
* Application 需要有android.Manifest.permission#ACCESS_COARSE_LOCATION的許可權
* Application 需要實現WebChromeClient#onGeolocationPermissionsShowPrompt的回撥,
* 接收Js定位請求訪問地理位置的通知
*/
setGeolocationEnabled(boolean flag)
/**
* 是否允許JS自動開啟視窗。預設false
*/
setJavaScriptCanOpenWindowsAutomatically(boolean flag)
/**
* 設定頁面的編碼格式,預設UTF-8
*/
setDefaultTextEncodingName(String encoding)
/**
* 設定WebView代理,預設使用預設值
*/
setUserAgentString(String ua)
/**
* 通知WebView是否需要設定一個節點獲取焦點當
* WebView#requestFocus(int,android.graphics.Rect)被呼叫的時候,預設true
*/
setNeedInitialFocus(boolean flag)
/**
* 基於WebView導航的型別使用快取:正常頁面載入會載入快取並按需判斷內容是否需要重新驗證。
* 如果是頁面返回,頁面內容不會重新載入,直接從快取中恢復。setCacheMode允許客戶端根據指定的模式來
* 使用快取。
* LOAD_DEFAULT 預設載入方式
* LOAD_CACHE_ELSE_NETWORK 按網路情況使用快取
* LOAD_NO_CACHE 不使用快取
* LOAD_CACHE_ONLY 只使用快取
*/
setCacheMode(int mode)
/**
* 設定載入不安全資源的WebView載入行為。KITKAT版本以及以下預設為MIXED_CONTENT_ALWAYS_ALLOW方
* 式,LOLLIPOP預設MIXED_CONTENT_NEVER_ALLOW。強烈建議:使用MIXED_CONTENT_NEVER_ALLOW
*/
setMixedContentMode(int mode)
下面我們就舉個例子來看下用法 示例1:在WebView中啟用JavaScript:
[java] view plain copy print?- publicclass MyActivity extends Activity {
- private WebView mWebView;
- private Button mBtn;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mWebView = (WebView) findViewById(R.id.webview);
- mBtn = (Button) findViewById(R.id.btn);
- WebSettings webSettings = mWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- }
- }
public class MyActivity extends Activity {
private WebView mWebView;
private Button mBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.webview);
mBtn = (Button) findViewById(R.id.btn);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
}
}
示例2:設定快取
優先使用快取[java] view plain copy print?
- webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.getSettings().se