日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发之路之 webview

發布時間:2024/3/13 Android 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发之路之 webview 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

公眾號:

歡迎關注我的個人公眾號,來一起交流Android 開發知識

一、簡介 本來不想專門找一節來介紹webview技術的,因為現在對于混合開發有很多的框架比如RN和FLutter,但是這些框架對于一些webview頁面比較少的項目來說顯得重量級了一些。因此還是單獨整理一篇出來,供以后項目的參考及學習。寫這篇文章確實花了很長的時間,一方面覺得很混亂,api很多都想說一點,另一方面覺得以后這些api到底能不能用到。因此有些章節說的比較籠統,我也給出了參考的博客地址,對于想深入了解的同學可以參考這些博客。 WebView在Android平臺上用于顯示網頁。WebView是一個基于WebKit引擎、展現Web頁面的控件,Android的WebView在低版本和高版本采用了不同的WebKit版本內。4.4后WebView內部實現并不是完全使用Chrome內核,而是部分使用了Chrome內核,其他都是與Chrome不相同的。 二、WebView的使用 webview的使用有兩種方式:一種是直接顯示網頁內容;另一種就是與JS進行交互。 2.1基本使用 2.1.1、webview加載在線的URL地址public class MainActivity extends AppCompatActivity { ??? private WebView mWebView; ??? @Override ??? protected void onCreate(Bundle savedInstanceState) { ??????? super.onCreate(savedInstanceState); ? ? ? ??setContentView(R.layout.activity_main); ??????? mWebView=(WebView)findViewById(R.id.webview); ? ? ? ? mWebView.loadUrl("http://www.baidu.com"); ??????? mWebView.setWebViewClient(new WebViewClient(){ ??????????? @Override ??????????? public boolean shouldOverrideUrlLoading(WebView view,?String?url) { ?? ??? ??? ??? ?mWebView.loadUrl(url); ??????????????? return true; ??????????? } ??????? }); ??????? ??? } ################ ?布局文件 ?############################ <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout ??? xmlns:android="http://schemas.android.com/apk/res/android" ??? xmlns:app="http://schemas.android.com/apk/res-auto" ??? xmlns:tools="http://schemas.android.com/tools" ??? android:layout_width="match_parent" ??? android:layout_height="match_parent"+? ? === ??? tools:context=".MainActivity"> ??? <WebView ??????? android:id="@+id/webview" ??????? android:layout_width="wrap_content" ??????? android:layout_height="wrap_content" ??????? app:layout_constraintBottom_toBottomOf="parent" ??????? app:layout_constraintLeft_toLeftOf="parent" ??????? app:layout_constraintRight_toRightOf="parent" ??????? app:layout_constraintTop_toTopOf="parent"/> </android.support.constraint.ConstraintLayout> 權限: <use-permission android:name=“android.permission.INTERNET”/> 注意:1、webview加載的url地址必須包含http://或者https://協議完整的域名地址,webview不會默認填充。 2、系統會默認通過手機瀏覽器去打開網頁,為了能夠直接通過webview顯示網頁,必須設置webviewclient.此 ?? 外還必須要添加相關權限。 2.1.2、加載本地的html文件。 加載本地的html文件有兩種,一種是加載本地assets目錄下的文件,這種html文件會打包到APK文件中,另一種是加載手機本地sdcard下的html文件。加載兩種類型的html文件同樣調用loadurl()方法,只不過url地址則需要加些前綴:
  • 如果html文件存放在assets目錄下則前綴為:file:///android_asset/+你的html文件名.html(注意這里有三個斜杠)
  • 如果html文件存放在sdcard下,則前綴為:content://com.android.htmlprovider/sdcard/+你的html文件名.html(注意:content前綴可能會導致異常,可以使用file:///sdcard/+你的html文件.html)你可以在手機瀏覽器中將“ file:///sdcard/+你的html文件.html”復制到訪問欄可以測試能不能訪問到。
具體代碼為: webview.loadUrl("file:///android_asset/test.html”);//加載assets夾下的html文件 webview.loadUrl("file:///sdcard/test.html”);//加載sdcard文件夾下的html文件 注意: 這里我們看出加載本地的html文件是不需要設置webviewclient的,而加載線上的html文件必須設置webviewclient。 三、webview的基本設置 /** * 是否支持縮放,配合方法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) 上述是所有的webview的設置方法,我們只需要按需通過webviewsetting設置即可。 四、JS互調 4.1 JS調用Java代碼 js調用java代碼是通過接口注入的方式實現的,主要用到的方法是: public void addJavascriptInterface(Object obj, String interfaceName) {} 第一個參數是我們注入js中的對象,第二個參數為這個對象的別名。這個別名就是在html中引用的名稱,來指代我們傳入第一個參數的對象。什么意思呢?打個比喻第一個參數我們傳的對象名稱就張飛,他的別名可以隨便起一個,都是指代張飛這個對象,我們可以傳翼德。html就用翼德這個名字去實現自己的方法。 另外一定要開啟js交互 WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); 這里實現一個簡單的功能,js調用java本地代碼,彈一個toast @SuppressLint({"AddJavascriptInterface", "SetJavaScriptEnabled"}) private void jsCallJava() { ??? WebSettings settings = mWebView.getSettings(); ??? settings.setJavaScriptEnabled(true); ??? settings.setSupportZoom(false); ??? mWebView.addJavascriptInterface(new JsBridge(MainActivity.this),"AndroidWebView"); ??? mWebView.loadUrl("file:///android_asset/test2.html"); } //JsBridge代碼 package com.sheca.mystudydemo2; import android.app.Activity; import android.util.Log; import android.webkit.JavascriptInterface; import android.widget.Toast; /** * @author xuchangqing * @time 2019/12/20 15:03 * @descript */ public class JsBridge { ??? private Activity mContext; ??? public JsBridge(Activity mContext){ ??????? this.mContext=mContext; ??? } ??? @JavascriptInterface ??? public void showInfoFromJs(final String message){ ??????? mContext.runOnUiThread(new Runnable() { ??????????? @Override ??????????? public void run() { ??????????????? Log.e("js",message); ??????????????? Toast.makeText(mContext,message+”調用了",Toast.LENGTH_SHORT).show(); ??????????? } ??????? }); ??? } ??? @JavascriptInterface ??? public int sub(int first,int second){ ??????? Toast.makeText(mContext,second-first+”調用了",Toast.LENGTH_SHORT).show(); ??????? return second-first; ??? } } 我們看一下html中的代碼: <!DOCTYPE html> <html lang="en"> <head> ??? <meta charset="UTF-8"> ??? <title>Title</title> ??? <h1 >我的博客</h1> </head> <body> <input type="button" value="js調用java" οnclick="f1()"> <input type="button" value="js調用java減法" οnclick="f2()"> <script type="text/javascript"> function f1() { ?? AndroidWebView.showInfoFromJs("哈哈,i m webview msg"); } function f2() { ?? AndroidWebView.sub(2,1); } </script> </body> </html> html中的AndroidWebView就是我們隊注入對象起的別名,showInfoFromJs就是注入對象中的方法。 注意在android版本17以上必須在注入接口對象中,對html調用的方法加入 @JavascriptInterface? 4.2 java調用JS 前面已經介紹了通過loadurl()來調用js中的方法,但是這種調用沒有辦法獲取js的返回值,那么怎么拿到js調用的返回值呢? 在4.4也就是api版本17以前,我們調用js方法之后,js再通過接口注入調用java本地的方法,將結果回傳過來。但是我們知道這種效率很低,很不方便。在4.4之后,提供了evaluateJavascript(),我們看一下示例代碼: 在test2.html文件中我們定義一個函數,用于java調用。 function f3(){ ??? return "我是誰?我在哪?"; } 看一下本地是如何調用的 //js返回值 ??? @SuppressLint({"AddJavascriptInterface", "SetJavaScriptEnabled"}) ??? private void jsCallJavaForReturn() { ??????? WebSettings settings = mWebView.getSettings(); ??????? settings.setJavaScriptEnabled(true); ??????? settings.setSupportZoom(false); //????? mWebView.addJavascriptInterface(new JsBridge(MainActivity.this),"AndroidWebView"); ??????? mWebView.loadUrl("file:///android_asset/test2.html"); ??????? mWebView.setWebViewClient(new WebViewClient() { ??????????? @Override ??????????? public void onPageFinished(WebView view, String url) { ??????????????? super.onPageFinished(view, url); ??????????????? mWebView.evaluateJavascript("javascript:f3()", new ValueCallback<String>() { ??????????????????? @Override ??????????????????? public void onReceiveValue(String value) { ??????????????????????? Toast.makeText(MainActivity.this,value,Toast.LENGTH_SHORT).show(); ??????????????????? } ??????????????? }); ??????????? } ??????? }); ??? } 注意:1、evaluateJavascript()這個方法必須保證在主線程中執行,另外回調onReceiveValue()這個方法也是在主線程中執行? ? ? ? ??? ? ? 的。 2、evaluateJvascript()第一次執行會收到null,再執行一次就能得到正確的返回結果。必須保證在網頁加載完畢后再執 行這個方法,所以在onPageFinished()方法執行后執行。 3、上述例子返回值類型為String類型,對于復雜的數據類型我們可以采用Json的形式返回。 五、WebViewClient 5.1?shouldOverrideUrlLoading 上面我們介紹到加載在線的url必須設置webviewClient,所以我們通常的寫法都是? mWebView.setWebViewClient(new WebViewClient()); 并沒有重寫shouldOverrideUrlLoading()這個方法,那么我們看一下這個方法是做什么的。

?

官方文檔給出的解釋: 我們可以通過這個方法來控制訪問新的url,如果沒有設置webviewclient,那么webview就會通過ActivityManager 為這個url選擇適當的處理方式,如果設置了webviewclient,返回true表示由APP層處理URL,如果返回false表示由 當前 webview處理url。對于使用post請求的,不會調用此方法。 簡而言之,如果我們想攔截某個url的訪問就可以重新這個方法。比如我們想攔截所有包含”blog.csdn.net“的地址,重定向訪問”www.baidu.com“可以怎么寫呢? webview.setWebViewClient(new WebViewClient(){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??@Override ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??public boolean shouldOverrideUrlLoading(WebView view, String url) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????????????????????????????? if(url.contains("blog.csdn.net")){ ????????????????????????????????????????????? view.loadUrl("http://www.baidu.com"); ????????????????????????????????????????? } else{ ????????????????????????????????????????????? view.loadUrl(url); ????????????????????????????????????????? } ????????????????????????????????????????? return true; ????????????????????????????????????? } ???????????????????????????????? } ??????? ); ??????? webview.loadUrl("https://blog.csdn.net/FlyRabbit_1"); ??? } 注意:這里我們返回的是true,在之前我們已經知道true表示攔截了該url,由APP層自己處理URL。對于其他的url如果不包含 ” https://blog.csdn.net/“這個地址的一定要在else中重寫view.load(url)方法,否則出現點擊鏈接沒有效果的情況。如果返回的是false我們就可以不進行判斷else中的view.loadUrl(url)的處理,原因我們前面已經說過了。 webview.setWebViewClient(new WebViewClient(){ ??????????????????????????@Override ??????????????????????????public boolean shouldOverrideUrlLoading(WebView view, String url) { ? ? ? ? ? ???? ??? ??? ????????????????????????????????????????? if(url.contains("blog.csdn.net")){ ????????????????????????????????????????????? view.loadUrl("http://www.baidu.com"); ????????????????????????????????????????? }? ????????????????????????????????????????? return false; ????????????????????????????????????? } ???????????????????????????????? } ??????? ); ??????? webview.loadUrl("https://blog.csdn.net/FlyRabbit_1"); ??? } 所以我們一般建議return false只關心攔截的url,對于其他的url不關心處理。 5.2 頁面處理 5.2.1 loading動畫 加載webview添加loading動畫需要使用webviewclient的兩個方法,onPageStarted();onPageFinished(); webview.setWebViewClient(new WebViewClient(){ ? ? ? ? ? ? ? ? ? ? ? ? ??@Override ? ? ? ? ? ? ? ? ? ? ? ? ?public boolean shouldOverrideUrlLoading(WebView view, String url){ ????????????????????????????????????????? if(url.contains("blog.csdn.net")){ ????????????????????????????????????????????? view.loadUrl("http://www.baidu.com"); ????????????????????????????????????????? } ????????????????????????????????????????? return false; ????????????????????????????????????? } ?? ??? ??? ??? ? ??????????????????????????@Override ?????????????????????????public void onPageStarted(WebView view, String url, Bitmap favicon) { ????????????????????????????????????????? super.onPageStarted(view, url, favicon); ????????????????????????????????????????? mProgress.show(); ????????????????????????????????????? } ????????????????????????????????????? @Override ????????????????????????????????????? public void onPageFinished(WebView view, String url) { ????????????????????????????????????????? super.onPageFinished(view, url); ????????????????????????????????????????? mProgress.dismiss(); ????????????????????????????????????? } ???????????????????????????????? } ??????? ); ??????? webview.loadUrl("https://blog.csdn.net/"); ??? } 5.2.2 錯誤頁面加載 我們可以在本地自定義一個錯誤頁面,調用onRecivedError()方法

這個方法需要我們傳入四個參數,webview對象,錯誤碼(加載url返回的錯誤碼),錯誤描述,已經失敗地址。

我們只需要在這個方法中加載我們自定義好的錯誤頁面即可。 @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?super.onReceivedError(view, request, error); ???????????????????????????????????????? view.loadUrl("file:///android_asset/error.html"); ???????????????????????????????????? } 5.2.3onRecivedSSLError(); 這個方法是在當請求HTTPS通信的網址出現錯誤的時候的回調。默認的請求方式為super.onReceivedSslError(view, handler, error)。如果取消加載頁面我們可以調用handler.cancle(),繼續加載我們可以調用handler.proceed()來繼續加載錯誤的頁面。 還有一點要說明一下,當出現SSL錯誤的時候webview默認是取消加載頁面的,只有我們設置handler.proceed()才能繼續加載頁面。另外當SSL發生錯誤的時候onRecivedError不會產生回調。 5.2.4webviewclient的其他函數 /** * 在加載頁面資源時會調用,每一個資源(比如圖片)的加載都會調用一次 */ public void onLoadResource(WebView view, String url) /** *??(WebView發生改變時調用) *??可以參考http://www.it1352.com/191180.html的用法 */ public void onScaleChanged(WebView view, float oldScale, float newScale) /** * 重寫此方法才能夠處理在瀏覽器中的按鍵事件。 * 是否讓主程序同步處理Key Event事件,如過濾菜單快捷鍵的Key Event事件。 * 如果返回true,WebView不會處理Key Event, * 如果返回false,Key Event總是由WebView處理。默認:false */ public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) /** * 是否重發POST請求數據,默認不重發。 */ onFormResubmission(WebView view, Message dontResend, Message resend) /** * 更新訪問歷史 */ doUpdateVisitedHistory(WebView view, String url, boolean isReload) /** * 通知主程序輸入事件不是由WebView調用。是否讓主程序處理WebView未處理的Input Event。 * 除了系統按鍵,WebView總是消耗掉輸入事件或shouldOverrideKeyEvent返回true。 * 該方法由event 分發異步調用。注意:如果事件為MotionEvent,則事件的生命周期只存在方法調用過程中, * 如果WebViewClient想要使用這個Event,則需要復制Event對象。 */ onUnhandledInputEvent(WebView view, InputEvent event) /** * 通知主程序執行了自動登錄請求。 */ onReceivedLoginRequest(WebView view, String realm, String account, String args) /** * 通知主程序:WebView接收HTTP認證請求,主程序可以使用HttpAuthHandler為請求設置WebView響應。默認取消請求。 */ onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) /** * 通知主程序處理SSL客戶端認證請求。如果需要提供密鑰,主程序負責顯示UI界面。 * 有三個響應方法:proceed(), cancel() 和 ignore()。 * 如果調用proceed()和cancel(),webview將會記住response, * 對相同的host和port地址不再調用onReceivedClientCertRequest方法。 * 如果調用ignore()方法,webview則不會記住response。該方法在UI線程中執行, * 在回調期間,連接被掛起。默認cancel(),即無客戶端認證 */ onReceivedClientCertRequest(WebView view, ClientCertRequest request) 5.2.5webview的響應事件的處理 如果webview包含多個頁面通常我們點擊返回鍵,會直接finish掉app而不是返回上一個頁面,我們希望回調上個頁面而不是退出瀏覽器該怎么設置呢?在Activity中重寫onKeyDown(int keyCoder,KeyEvent event)方法,返回上一個頁面。 六、webviewChromeClient webviewChromeClient與webviewClient是針對不同webview事件的回調,webviewClient處理各種通知與請求事件,而webviewChromeClient處理js對話框、網站圖標、title、加載進度等等。 我們先看一下webviewChromeClient常用的函數有哪些 /** * 當網頁調用alert()來彈出alert彈出框前回調,用以攔截alert()函數 */ public boolean onJsAlert(WebView view, String url, String message,JsResult result) /** * 當網頁調用confirm()來彈出confirm彈出框前回調,用以攔截confirm()函數 */ public boolean onJsConfirm(WebView view, String url, String message,JsResult result) /** * 當網頁調用prompt()來彈出prompt彈出框前回調,用以攔截prompt()函數 */ public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) /** * 打印 console 信息 */ public boolean onConsoleMessage(ConsoleMessage consoleMessage) /** * 通知程序當前頁面加載進度 */ public void onProgressChanged(WebView view, int newProgress) /* * 通知頁面標題變化 */ nReceivedTitle(WebView view, String title) /* * 通知當前頁面網站新圖標 */ onReceivedIcon(WebView view, Bitmap icon) /* * 通知主程序圖標按鈕URL */ onReceivedTouchIconUrl(WebView view, String url, boolean precomposed) /* * 通知主程序當前頁面將要顯示指定方向的View,該方法用來全屏播放視頻。 */ public interface CustomViewCallback { ???????// 通知當前頁面自定義的View被關閉 ???????public void onCustomViewHidden(); ???} onShowCustomView(View view, CustomViewCallback callback) /* * 與onShowCustomView對應,通知主程序當前頁面將要關閉Custom View */ onHideCustomView() /** * 請求主程序創建一個新的Window,如果主程序接收請求,返回true并創建一個新的WebView來裝載Window,然后添加到View中,發送帶有創建的WebView作為參數的resultMsg的給Target。如果主程序拒絕接收請求,則方法返回false。默認不做任何處理,返回false */ onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) /* * 顯示當前WebView,為當前WebView獲取焦點。 */ onRequestFocus(WebView view) /* * 通知主程序關閉WebView,并從View中移除,WebCore停止任何的進行中的加載和JS功能。 */ onCloseWindow(WebView window) /** * 告訴客戶端顯示離開當前頁面的導航提示框。如果返回true,由客戶端處理確認提示框,調用合適的JsResult方法。如果返回false,則返回默認值true給javascript接受離開當前頁面的導航。默認:false。JsResult設置false,當前頁面取消導航提示,否則離開當前頁面。 */ onJsBeforeUnload(WebView view, String url, String message, JsResult result) /** *通知主程序web內容嘗試使用定位API,但是沒有相關的權限。主程序需要調用調用指定的定位權限申請的回調。更多說明查看GeolocationPermissions相關API。 */ onGeolocationPermissionsShowPrompt(String origin,GeolocationPermissions.Callback callback) /* * 通知程序有定位權限請求。如果onGeolocationPermissionsShowPrompt權限申請操作被取消,則隱藏相關的UI界面。 */ onGeolocationPermissionsHidePrompt() /** *通知主程序web內容嘗試申請指定資源的權限(權限沒有授權或已拒絕),主程序必須調用PermissionRequest#grant(String[])或PermissionRequest#deny()。如果沒有覆寫該方法,默認拒絕。 */ onPermissionRequest(PermissionRequest request) /** * 通知主程序相關權限被取消。任何相關UI都應該隱藏掉。 */ onPermissionRequestCanceled(PermissionRequest request) /** * 通知主程序 執行的Js操作超時。客戶端決定是否中斷JavaScript繼續執行。如果客戶端返回true,JavaScript中斷執行。如果客戶端返回false,則執行繼續。注意:如果繼續執行,重置JavaScript超時計時器。如果Js下一次檢查點仍沒有結束,則再次提示。 */ onJsTimeout() /** *當停止播放,Video顯示為一張圖片。默認圖片可以通過HTML的Video的poster屬性標簽來指定。如果poster屬性不存在,則使用默認的poster。該方法允許ChromeClient提供默認圖片。 */ getDefaultVideoPoster() /** * 當用戶重放視頻,在渲染第一幀前需要花費時間去緩沖足夠的數據。在緩沖期間,ChromeClient可以提供一個顯示的View。如:可以顯示一個加載動畫。 */ getVideoLoadingProgressView() /** * 獲取訪問歷史Item,用于鏈接顏色。 */ getVisitedHistory(ValueCallback callback) /** * 通知客戶端顯示文件選擇器。用來處理file類型的HTML標簽,響應用戶點擊選擇文件的按鈕操作。調用filePathCallback.onReceiveValue(null)并返回true取消請求操作。 * FileChooserParams參數的枚舉列表: MODE_OPEN 打開 MODE_OPEN_MULTIPLE 選中多個文件打開 MODE_OPEN_FOLDER 打開文件夾(暫不支持) MODE_SAVE 保存 */ onShowFileChooser(WebView webView, ValueCallback filePathCallback,FileChooserParams fileChooserParams) /** * 解析文件選擇Activity返回的結果。需要和createIntent一起使用。 */ parseResult(int resultCode, Intent data) /** * 創建Intent對象來啟動文件選擇器。Intent支持可訪問的簡單類型文件資源。不支持高級文件資源如live media capture媒體快照。如果需要訪問這些資源或其他高級文件類型資源可以自己創建Intent對象。 */ createIntent() /** * 返回文件選擇模式 */ getMode() /** * 返回可訪問MIME類型數組,如audio/*,如果沒有指定可訪問類型,數組返回為null */ getAcceptTypes() /** * 返回優先的媒體快照類型值如Camera、Microphone。true:允許快照。false,禁止快照。使用getAcceptTypes方法確定合適的capture設備。 */ isCaptureEnabled() /** * 返回文件選擇器的標題。如果為null,使用默認名稱。 */ getTitle() /** *指定默認選中的文件名或為null */ getFilenameHint() 6.1 對話框 我們主要介紹一下通過webviewChromeClient處理一些webview的對話框: 常見的有三種類型的對話框:Alert、Confirm、Prompt對話框。 在這里我們只說一個alert對話框,剩余的兩個實現方法是一樣的。這三個函數的返回值類型都是boolean類型,默認情況下返回的是super()也就是父類的函數為false.返回類型為false是調用的是webview系統的對話框,表示我們沒有攔截系統調用對話框的方法,如果返回值類型為true,表示我們攔截系統彈出的對話框,這個時候我們要注意調用jsResult.confirm()確認或者調用jsResult.cancle()來取消,注意如果我們不調用這兩個方法中的一個,再次點擊按鈕的時候會導致點擊按鈕沒有反應。 我們看一下實現的代碼: html代碼 <!DOCTYPE html> <html lang="en"> <head> ??? <meta charset="UTF-8"> ??? <title>Title</title> </head> <body> <button οnclick="confirm('是否刪除?')">confirm</button> <button οnclick="alert('??警告!系統即將爆炸,立即撤離!')">alert</button> <button οnclick="prompt('請輸入內容')">prompt</button> </body> </html> java調用代碼 package com.sheca.mystudydemo2; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.webkit.JsPromptResult; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class DialogWebView extends AppCompatActivity { ??? private WebView mDialogWebView; ??? @Override ??? protected void onCreate(Bundle savedInstanceState) { ??????? super.onCreate(savedInstanceState); ??????? setContentView(R.layout.activity_dialog_web_view); ??????? initView(); ??? } ??? private void initView() { ??????? mDialogWebView=(WebView)findViewById(R.id.webview_dialog); ??????? WebSettings settings = mDialogWebView.getSettings(); ??????? settings.setJavaScriptEnabled(true); ??????? mDialogWebView.setWebViewClient(new WebViewClient()); ??????? mDialogWebView.setWebChromeClient(new WebChromeClient(){ ??????????? @Override ??????????? public boolean onJsAlert(WebView view, String url, String message, JsResult result) { //??????????????? return super.onJsAlert(view, url, message, result); ??????????????? Toast.makeText(DialogWebView.this,"url"+url+"msg"+message,Toast.LENGTH_SHORT).show(); ??????????????? result.confirm(); ??????????????? return true; ??????????? } ??????????? @Override ??????????? public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { ??????????????? return super.onJsPrompt(view, url, message, defaultValue, result); ??????????? } ??????????? @Override ??????????? public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { ??????????????? return super.onJsConfirm(view, url, message, result); ??????????? } ??????? }); ??????? mDialogWebView.loadUrl("file:///android_asset/dialog.html"); ??? } } 6.2webview的優化 這部分的知識點比較多。 可以從緩存、性能等方面進行優化 可以參考以下博文: 美團技術團隊: https://tech.meituan.com/2017/06/09/webviewperf.html 任玉剛: https://juejin.im/post/5b94ca52e51d450e7d097f38 今日頭條: https://www.jianshu.com/p/85e4f982cbdf 6.3webivew調試: 手機端和PC端都要安裝Chrome瀏覽器,手機端的瀏覽器版本要比PC端的版本低。在Android4.4版本以上調用setWebContentsDebuggingEnabled啟用webView調試,設置代碼如下: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { ????WebView.setWebContentsDebuggingEnabled(true); } 在瀏覽器中輸入:Chrome://inspect進入調試頁面,點擊inspect即可進行調試了。 關于Webview的用到的知識點先介紹到這里。

總結

以上是生活随笔為你收集整理的Android开发之路之 webview的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

伊人色播| av免费看网站 | 天天插天天色 | 久久精品一区二区三区中文字幕 | 婷婷久操 | 精品国产资源 | 99精品久久久| 国产精品一区二区av影院萌芽 | 国产精品久久久久久久久久久久午夜 | www.成人久久 | 亚洲国产日韩在线 | 国产亚洲精品久久久久久电影 | 亚洲精品久久久蜜臀下载官网 | 天天操天天射天天舔 | av电影在线观看完整版一区二区 | 免费视频成人 | 91爱爱免费观看 | 成年人视频在线观看免费 | 在线黄色免费av | 91麻豆精品国产91久久久久 | 97精品国产91久久久久久 | 在线观看日韩 | 欧美伦理一区二区三区 | 久久久久久久电影 | 久久免费99| 亚洲v欧美v国产v在线观看 | 日韩精品免费在线观看视频 | 日韩黄色免费在线观看 | 国产精品久久久久影院 | 久久97久久97精品免视看 | 一级欧美日韩 | 丰满少妇一级片 | av片子在线观看 | 亚洲色图27p | 蜜臀av性久久久久av蜜臀妖精 | 99久久精品国产亚洲 | 国产精品一区久久久久 | 日韩高清免费在线 | 99久久精品久久久久久清纯 | 337p日本大胆噜噜噜噜 | 亚州精品一二三区 | 在线观看你懂的网站 | 久久精品人人做人人综合老师 | 久久精品女人毛片国产 | 欧美性另类 | 99亚洲精品在线 | 精品国产一区二区三区免费 | 日韩av电影免费观看 | 国产在线国偷精品产拍免费yy | 亚洲免费在线观看视频 | 国产精品99久久久精品 | 日本一区二区三区免费观看 | 91看片麻豆| 亚洲精品美女久久久 | 成人精品999 | 中文字幕第一页在线视频 | 91免费观看网站 | 91超碰免费在线 | 久久毛片高清国产 | 亚洲精品免费观看视频 | 成人一区二区三区中文字幕 | 国产精品久久久毛片 | 欧美日韩国产高清视频 | 国产精品99久久久久久久久久久久 | 六月色丁香 | 欧美 日韩精品 | 黄色a级片在线观看 | 中文字幕在线乱 | 999亚洲国产996395| 久久草在线免费 | 色婷婷色| 亚洲国产日韩欧美 | 四虎影视av | 免费av福利| 美女视频网 | 久久婷婷五月综合色丁香 | av性在线| 国产精品久久久久久久久久久久午夜片 | 国产人在线成免费视频 | 麻豆一精品传二传媒短视频 | 中文字幕在线观看日本 | 久久久久久国产精品免费 | 91精品爽啪蜜夜国产在线播放 | 日本中文不卡 | 亚洲精品麻豆视频 | 亚洲成人动漫在线观看 | 久久久www成人免费精品 | www五月天com | 五月婷婷综合在线观看 | 手机在线中文字幕 | 亚洲久久视频 | 久久男人视频 | 在线看成人片 | 中文字幕在线观看一区二区 | 成人在线视频观看 | 久草视频在线看 | 色婷婷精品大在线视频 | 天堂中文在线视频 | 日韩欧美视频免费观看 | 精品一区二区免费在线观看 | 中文字幕在线有码 | 五月天丁香亚洲 | 91精品91| www黄在线 | 久草电影免费在线观看 | www.久久久 | 亚洲三级网站 | 日本高清中文字幕有码在线 | 亚洲免费专区 | 久久久人人人 | 精品成人免费 | 日韩91精品 | 国产涩涩网站 | 欧美日韩首页 | 国产午夜精品一区二区三区欧美 | 在线观看911视频 | 国内免费久久久久久久久久久 | 亚洲天堂网视频在线观看 | 色丁香色婷婷 | 婷婷综合 | 亚洲综合在线播放 | 亚洲黄色高清 | 色狠狠狠 | 久久中文字幕视频 | 丁香婷婷久久久综合精品国产 | 成 人 黄 色 视频免费播放 | 欧美福利网址 | 婷婷伊人综合 | 久久久久女教师免费一区 | 国产不卡免费视频 | 久久福利小视频 | 久久躁日日躁aaaaxxxx | 日韩欧美视频一区二区三区 | 国产一区二区三区 在线 | 9992tv成人免费看片 | 国产精品2区 | 欧美成人精品三级在线观看播放 | a级片在线播放 | 久久夜色精品国产欧美一区麻豆 | 96精品高清视频在线观看软件特色 | 激情视频亚洲 | 久久综合免费 | 国产原创在线 | 久久免费av电影 | 91av蜜桃 | 亚洲无吗天堂 | 欧洲性视频 | 99热官网 | 午夜精品久久久久久久99水蜜桃 | 麻豆视频免费看 | 久久尤物电影视频在线观看 | 精品亚洲视频在线观看 | 狠狠色狠狠色综合日日小说 | 日韩一区二区三区观看 | 成人免费视频网址 | 丁香六月五月婷婷 | av黄色一级片 | 成人精品国产免费网站 | 97天天干| 国产亚洲精品久久久久久网站 | 国产精品第 | 成人免费视频免费观看 | 欧美久久影院 | 在线免费观看黄网站 | 99夜色 | 成 人 黄 色 片 在线播放 | 国内精品久久久久久久 | 日韩性片 | 天天操伊人| 国产在线观看网站 | 日韩av影片在线观看 | 日日麻批40分钟视频免费观看 | 中文字幕一区二区在线播放 | 91高清一区 | 国产精选视频 | 天天射天天艹 | 免费在线观看av的网站 | 91九色精品国产 | 久久久久久久网 | 视频福利在线观看 | 日韩免费 | 狠狠色丁香婷婷综合久小说久 | 中文字幕成人 | 日韩欧美在线综合网 | 国产精品久久久视频 | 亚洲精品久久久久999中文字幕 | 国产伦精品一区二区三区在线 | 亚洲日本成人网 | 国产一区二区在线影院 | 国产一区免费观看 | 欧美成人h版电影 | 成人av一区二区在线观看 | 日韩va在线观看 | 97电影院网 | 中文字幕韩在线第一页 | 欧美日韩中文在线观看 | 久草在线最新免费 | 日韩黄色中文字幕 | 91视频在线观看大全 | 久久国产精品偷 | 精品国产伦一区二区三区观看体验 | 国产精品入口a级 | 成年人黄色免费看 | 伊人夜夜| 欧美性色网站 | 久久草精品| 色香蕉网 | 精品久久一级片 | 国产三级香港三韩国三级 | 国产精品理论片在线观看 | 欧美性生交大片免网 | 国产午夜精品av一区二区 | 美女搞黄国产视频网站 | 96国产在线 | 一级黄色片在线播放 | 免费a网址 | 久久99精品热在线观看 | 国产成人精品亚洲精品 | 国产成人免费观看久久久 | aⅴ视频在线| 天天干天天做天天操 | 国产成人精品久久久久 | 天天鲁一鲁摸一摸爽一爽 | 黄网站大全| 九九九视频精品 | 在线观看 亚洲 | 综合天堂av久久久久久久 | 亚洲另类在线视频 | 蜜臀av夜夜澡人人爽人人桃色 | 国产精品一区二区在线免费观看 | 国产精品 国内视频 | 久久99久久99精品免视看婷婷 | 久久97久久97精品免视看 | 精品中文字幕视频 | 韩国av一区二区三区在线观看 | 一区二区三区动漫 | 久久avav | 香蕉91视频 | 色噜噜在线观看 | av资源免费观看 | 深爱激情婷婷网 | 久久人91精品久久久久久不卡 | 黄色的网站在线 | av免费高清观看 | 六月天综合网 | wwwwww色| 日韩色视频在线观看 | 亚洲国产精品久久久久 | 日日夜夜综合网 | 黄色三级久久 | 国产成人高清 | 精品久久久99 | 国产字幕在线观看 | 日韩在线观看中文 | 日本资源中文字幕在线 | www激情com| 日本爽妇网 | 欧美精品久久久久久久久久白贞 | 日韩免费av在线 | 久久欧美在线电影 | 一区二区三区四区在线免费观看 | 黄色a级片在线观看 | 国产精品久久久久久久久软件 | 人成电影网 | 丁香婷婷成人 | 在线播放亚洲激情 | 久久久久国产免费免费 | 久久久亚洲网站 | 久久久久久高潮国产精品视 | 精品国产综合区久久久久久 | 一区二区欧美在线观看 | 午夜 久久 tv| 一区二区视频免费在线观看 | 日韩视频一区二区在线 | 最新极品jizzhd欧美 | 成人欧美日韩国产 | 亚洲欧美日韩在线看 | 久久人人爽人人爽人人片av免费 | 国产在线成人 | 亚洲电影第一页av | 美女av在线免费 | 欧美日韩免费一区二区 | 国产色小视频 | 亚洲精品在线观看视频 | 狠狠的操狠狠的干 | 粉嫩av一区二区三区四区在线观看 | 五月天久久久 | 日本中文字幕影院 | 久久精品久久久精品美女 | 国产一区二区在线免费播放 | 99久久精品免费看国产麻豆 | 国产精品久久艹 | 中文在线| 免费看色的网站 | 亚洲国产日韩一区 | 丝袜足交在线 | 97在线观看免费观看 | 在线观看免费观看在线91 | 国产精品18久久久久久久 | av黄色大片 | 日韩有码网站 | 狠狠干夜夜 | 国产成人一区二区精品非洲 | 91片黄在线观看 | 国产精品欧美久久久久天天影视 | 亚洲午夜av久久乱码 | 欧美在线视频二区 | 4438全国亚洲精品观看视频 | 久久国产经典视频 | 日韩中文字幕亚洲一区二区va在线 | 国产经典av | 激情欧美一区二区三区免费看 | 日本乱码在线 | 国产精品系列在线观看 | 国产白浆视频 | 麻花豆传媒mv在线观看 | 日韩在线一二三区 | 91精品久久香蕉国产线看观看 | a天堂中文在线 | 国产成人久久av免费高清密臂 | 久草视频视频在线播放 | 国产精品免费在线视频 | 亚洲精品高清在线 | 欧美福利精品 | 在线视频日韩一区 | avv天堂| 免费看污片 | 国产精品亚洲综合久久 | 亚洲精品久久久久58 | 激情视频一区二区 | 91精品视频在线观看免费 | 久久a v视频| 成片视频在线观看 | 视频二区在线 | 就操操久久 | 国产99色 | 狠狠干我 | 欧美另类视频 | 国产日韩一区在线 | 欧美黄色成人 | 天天摸天天操天天舔 | av网站在线免费观看 | 国产不卡精品 | 99夜色| 欧美精品一区二区性色 | 久精品视频 | 久久兔费看a级 | 日本中文字幕在线观看 | 狠狠操综合网 | 亚洲综合在线观看视频 | 天天干天天拍天天操 | 欧美一级激情 | 久久av免费电影 | 久久综合久久综合久久 | 午夜精品久久久 | 深夜免费福利网站 | 视频国产精品 | 国产伦精品一区二区三区无广告 | 亚洲黄色免费网站 | 色 免费观看 | 97精品超碰一区二区三区 | av网址最新| 麻豆视频观看 | 午夜av在线电影 | 日韩av在线资源 | 免费看的毛片 | 欧美精彩视频 | 亚洲国产视频直播 | 在线观看视频99 | 国产一级大片免费看 | 嫩模bbw搡bbbb搡bbbb | 国偷自产视频一区二区久 | 日韩一二三在线 | a成人v在线 | 国产女v资源在线观看 | 欧美精品乱码99久久影院 | 久碰视频在线观看 | 色福利网站| 午夜精品久久久久久久99婷婷 | 懂色av一区二区三区蜜臀 | 国产丝袜高跟 | 一区二区激情视频 | 美女视频是黄的免费观看 | 亚洲视频 视频在线 | 91丨九色丨国产丨porny精品 | 在线观看精品视频 | 国产日产精品一区二区三区四区的观看方式 | 久久久久久久免费 | 国产福利电影网址 | 国产日韩欧美在线观看 | 狠狠狠狠狠狠天天爱 | 99视频在线观看一区三区 | 亚洲经典精品 | 色丁香色婷婷 | 午夜视频久久久 | 最近日本韩国中文字幕 | 色噜噜在线观看视频 | 91免费版在线 | 国产成人区 | 能在线观看的日韩av | 久久久久综合视频 | 男女男视频 | 97碰视频| 久久国产精品一国产精品 | 日韩a在线| 91在线视频精品 | 一区二区中文字幕在线 | 国产午夜麻豆影院在线观看 | 9797在线看片亚洲精品 | 欧美性色黄大片在线观看 | 欧美国产日韩一区 | 黄色av电影一级片 | 婷婷深爱 | 欧美日韩免费观看一区=区三区 | 久久国际影院 | 日韩高清在线一区二区 | 国产视频在线免费观看 | 精品久久一区二区 | 国产一级特黄毛片在线毛片 | 精品人妖videos欧美人妖 | 亚洲欧美国产精品18p | 天堂中文在线播放 | 亚洲成人在线免费 | 狠狠色丁香婷婷综合基地 | 国产福利一区二区三区视频 | 欧美性极品xxxx做受 | 国产精品一码二码三码在线 | 亚洲精品中文字幕视频 | 亚洲综合色网站 | 日本护士三级少妇三级999 | 国产探花在线看 | 国产欧美久久久精品影院 | 国产成人av一区二区三区在线观看 | 日本在线视频一区二区三区 | 精品视频免费在线 | a一片一级 | 成人丁香花 | 91精品国产自产在线观看永久 | 免费黄色a级毛片 | 青春草视频在线播放 | 日韩国产欧美在线视频 | 国产不卡一区二区视频 | 国产精品一区欧美 | 亚洲精品国产精品久久99 | 伊色综合久久之综合久久 | 日日操狠狠干 | 国产一区二区视频在线播放 | aaa日本高清在线播放免费观看 | 在线观看精品一区 | 国产中文字幕免费 | 黄色大片日本 | 在线日韩亚洲 | 视频一区二区在线观看 | 亚洲精品 在线视频 | 精品一区二区三区久久久 | 一级黄色片在线免费看 | www.五月婷 | 中文字幕二区三区 | h久久| 欧美在线视频精品 | 美女国产在线 | 91视频免费播放 | 久久蜜臀一区二区三区av | 久久久久久久久久电影 | 怡红院av | 国产亚洲激情视频在线 | 精品国产亚洲日本 | 国产超碰在线观看 | 99亚洲精品视频 | 亚洲一二区视频 | 日韩av午夜 | 一区二区三区精品久久久 | 在线观看视频免费播放 | 五月婷婷操 | 国产精品免费一区二区三区在线观看 | 成人免费中文字幕 | 中文字幕一区二区三区久久 | 91高清视频| 超碰av在线播放 | 9797在线看片亚洲精品 | 久草在线手机观看 | 伊人中文网| 国产成人在线看 | 99久久精品免费看国产 | 免费男女网站 | 91麻豆精品国产自产 | 亚洲天堂精品视频 | 国内精品久久久久久久久久久久 | 999久久国精品免费观看网站 | 正在播放 国产精品 | 亚洲无吗视频在线 | 国产精品久久久久国产精品日日 | 91在线视频免费播放 | 欧美日本国产在线观看 | 国产精品久免费的黄网站 | 久久精品成人热国产成 | 欧美成年性 | 伊人成人久久 | 久久综合给合久久狠狠色 | 久久av伊人 | av在线亚洲天堂 | 日韩在线在线 | 日日夜夜噜噜噜 | 黄色一级大片在线免费看国产一 | 91人人在线 | 午夜精品电影 | 国产成人精品999 | 欧美激情第一页xxx 午夜性福利 | 青青草久草在线 | 亚洲天堂香蕉 | 日韩精品1区2区 | 亚洲免费在线观看视频 | 亚洲精品国产成人 | 激情片av | 在线观看av黄色 | 日日天天av | 99在线精品免费视频九九视 | 在线播放91 | 久久国产精品第一页 | 日本不卡视频 | 国内小视频在线观看 | 狠狠干美女 | 在线观看视频亚洲 | 就色干综合 | 中文字幕一区二区三区四区久久 | 成人黄色大片在线免费观看 | 日韩一级电影在线观看 | 在线精品一区二区 | 天天狠狠| 天天弄天天干 | 久久久久黄色 | 91视频在线自拍 | 亚洲精品久久久久www | 亚洲爱av| 黄色天堂在线观看 | 成人在线播放网站 | 欧美日韩69 | 日本精品一二区 | 国产午夜三级一二三区 | 国产三级视频在线 | 91重口视频 | 伊人影院99 | 日韩精品短视频 | 91中文在线观看 | 精品国产一区二区三区蜜臀 | 最近中文字幕高清字幕在线视频 | 国内一区二区视频 | 久久夜夜夜 | a色网站 | 激情综合网五月婷婷 | 婷婷色吧| 国产亚洲成人网 | 五月婷婷视频在线观看 | 波多野结衣资源 | 亚洲精品视频在线观看网站 | 日本最新高清不卡中文字幕 | 成人久久精品视频 | 免费国产一区二区 | 亚洲精品视频在线观看免费视频 | 日韩三级在线 | 粉嫩一二三区 | 在线免费视频一区 | 狠狠干网站 | 久久国产女人 | 欧美一级免费黄色片 | a电影在线观看 | 成人网444ppp | 激情久久综合 | 黄色在线观看网站 | 99视频在线免费观看 | a'aaa级片在线观看 | 去干成人网 | 一区二区欧美在线观看 | 日韩电影中文字幕在线 | 国产精品一区二区三区久久久 | 在线直播av | 久久久国产精品久久久 | a特级毛片 | 国产免费大片 | 天天看天天干 | 国产精品2019 | 丁香电影小说免费视频观看 | 天天色天天色天天色 | 久久精品综合 | 天天天射 | 国产色秀视频 | 亚洲精品影院在线观看 | 日日射av| 黄污视频大全 | 亚洲人精品午夜 | 色狠狠久久av五月综合 | 2023av在线| 色999五月色 | 亚洲区另类春色综合小说校园片 | 97免费在线视频 | 99色在线视频 | 日本性动态图 | 8x8x在线观看视频 | 日韩欧美国产免费播放 | 国产视频2 | 91看片一区二区三区 | 日韩网站在线免费观看 | 一区二区三区免费 | 18国产精品福利片久久婷 | www.狠狠色 | 日韩大片在线免费观看 | 五月开心六月伊人色婷婷 | 怡红院av久久久久久久 | 亚洲午夜久久久久 | 婷婷丁香在线视频 | 九七视频在线观看 | 国产成人一区二区三区久久精品 | 国产一级二级视频 | 免费91麻豆精品国产自产在线观看 | 婷婷视频在线观看 | 国产视频在线观看一区二区 | 日日操日日插 | 五月婷婷激情网 | 国际精品久久久久 | 国产精品第54页 | 久久国产成人午夜av影院宅 | 亚洲欧美日韩国产精品一区午夜 | 精品久久久久久久久久国产 | 国产尤物在线观看 | 在线免费观看黄色 | 欧美a级成人淫片免费看 | 99精品在线观看 | 中文字幕一区二区三区久久 | 午夜性色 | 久久天天拍 | 久久久久久久久久影视 | 久久久久久久久国产 | 天天插狠狠插 | 一区免费视频 | www操操| 精品亚洲在线 | 在线国产小视频 | 2020天天干天天操 | 久久亚洲欧美日韩精品专区 | 日韩免费在线网站 | 久久久久久国产精品亚洲78 | 国产精品久久久久久69 | 在线婷婷| 九色视频网 | 在线观看黄a | 欧美精品久久人人躁人人爽 | 美女一区网站 | 91精品一区二区三区蜜桃 | 国产成人一二片 | av动态图片 | 国产在线中文 | 国产精品a久久 | 久草在线视频网站 | 最近日韩免费视频 | 7777xxxx| 伊人看片 | 九九久久影视 | 在线中文字幕视频 | 女人高潮一级片 | 极品美女被弄高潮视频网站 | 91九色国产蝌蚪 | 人人草在线视频 | 7777xxxx| 精品国产视频一区 | 91视频高清免费 | 五月婷婷丁香激情 | 不卡日韩av| 99欧美 | 成人免费网站视频 | av韩国在线 | 国产破处视频在线播放 | 久久精选| 中文字幕黄色av | 亚洲精品视频在线观看视频 | 999久久a精品合区久久久 | 国产涩图 | 久久精品欧美一区二区三区麻豆 | 国产 av 日韩 | 中文字幕字幕中文 | 婷婷精品视频 | 97在线视 | 不卡的av在线 | 黄色官网在线观看 | 色久av| 日日干夜夜骑 | www.久久免费 | 在线成人短视频 | 国产黄色高清 | 日韩视频在线不卡 | 日韩伦理片hd | 日产av在线播放 | 久久亚洲欧美日韩精品专区 | 亚洲天堂网站视频 | 天天插天天干 | 国产资源在线免费观看 | 黄色三级免费观看 | 久久成人欧美 | 黄色亚洲大片免费在线观看 | 狠狠色丁香婷婷综合久小说久 | 中文字幕在线观看的网站 | 国产精品久久久久久麻豆一区 | 国产精品黑丝在线观看 | 天堂av免费 | 一区二区三区免费在线观看 | 一级α片| 91在线看视频免费 | 欧美日韩激情视频8区 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 久久精品成人 | 超碰午夜| 婷婷成人亚洲综合国产xv88 | 国产一级片网站 | 亚洲精品456在线播放第一页 | 久久黄色影院 | 激情av资源网 | 最近av在线 | 日本中文在线观看 | 天堂av免费在线 | 欧美日韩一级在线 | 国产一级小视频 | 久热国产视频 | 国产免费观看视频 | 插插插色综合 | 国产精品激情在线观看 | 亚洲午夜精品久久久久久久久久久久 | 精品免费久久久久久 | av片子在线观看 | 91尤物在线播放 | 国产成人黄色在线 | 亚洲天堂va| 日韩欧美精品一区二区三区经典 | 伊人五月天av | 青青久视频 | 九九日韩| 亚洲在线黄色 | 91精品91 | 久久不卡视频 | av无限看| 亚州视频在线 | 国产女人18毛片水真多18精品 | 免费的国产精品 | 91精品啪在线观看国产线免费 | 在线成人av| 在线之家免费在线观看电影 | 国际精品久久久久 | 丝袜制服天堂 | 日韩免费电影在线观看 | 色综合久久精品 | 麻豆va一区二区三区久久浪 | 成人性生交大片免费观看网站 | 色播99| 日韩中文字幕视频在线 | 国产精品永久久久久久久www | 在线免费性生活片 | 免费黄色在线 | 96av在线视频| 97超碰人人爱 | 中文字幕乱码一区二区 | 一区二区三区四区在线 | 手机看片国产日韩 | 人人干人人搞 | 韩日av一区二区 | 欧美日韩亚洲国产一区 | 九九久久国产 | 亚洲人成人99网站 | 日韩免费 | 黄色亚洲在线 | 天天精品视频 | 亚洲精品久久久蜜桃直播 | 深夜免费小视频 | 国产很黄很色的视频 | 97碰碰精品嫩模在线播放 | 国产黄色片一级 | 天天做日日爱夜夜爽 | 激情av资源 | 激情综合网色播五月 | 亚洲免费在线 | 中文字幕日本电影 | 91综合在线| 亚洲国产精品资源 | 日韩欧美电影在线 | 亚洲一级片免费观看 | 黄色软件在线观看视频 | 人人狠狠综合久久亚洲婷 | 国产精品久久久免费看 | 欧美一级小视频 | 麻豆视频国产 | 天天艹| 国产精品久久久久久久久久免费看 | 丁香久久五月 | 亚洲精品国精品久久99热 | 免费日韩一级片 | www国产亚洲精品 | 麻豆视频观看 | 色综合久久久网 | 久久久精品一区二区 | 五月婷婷操 | 成年人在线免费看视频 | 在线免费观看视频一区 | 久久免费电影网 | 国产精品国产三级国产 | 日韩一区正在播放 | 久久精品国产一区二区 | 国产精品美女久久久久久久久久久 | 国产 精品 资源 | 国产91勾搭技师精品 | 五月亚洲婷婷 | 国产成人精品一区二区三区福利 | 91在线观看视频 | 色婷婷久久 | 久草视频在线免费播放 | 久久久高清免费视频 | 在线观看视频日韩 | 国产麻豆精品传媒av国产下载 | 337p日本欧洲亚洲大胆裸体艺术 | 又黄又刺激又爽的视频 | 在线观看黄色免费视频 | 天堂黄色片 | 日韩精品一区二区在线观看 | 成人免费网视频 | 久久国产免 | 精品在线视频观看 | 日本韩国精品一区二区在线观看 | 国产精品69久久久久 | 精品久久国产 | 日韩在线视频网址 | 国产在线欧美 | 午夜三级福利 | 久久精品99国产精品亚洲最刺激 | 丁香五婷| 亚洲日本精品视频 | 国产精品免费在线视频 | 日韩欧美精品一区 | 国产一级淫片在线观看 | 久久影视中文字幕 | 日韩三级久久 | 成人v| 婷婷激情综合网 | 在线电影 一区 | 久在线| 在线观看国产一区 | 中文字幕在线观看第一区 | 成年人网站免费在线观看 | 亚洲精品美女在线观看播放 | 亚洲成av人片在线观看香蕉 | 国产美女视频 | 亚洲免费a | 午夜久久久久久久久 | 狠狠88综合久久久久综合网 | 综合网伊人| 久久资源在线 | 国产一区视频在线播放 | 亚洲精区二区三区四区麻豆 | 欧美va天堂va视频va在线 | 日日夜夜噜 | 日韩激情小视频 | 国产一区在线视频播放 | av免费网站在线观看 | 狠狠激情中文字幕 | 91中文字幕在线观看 | 91成年视频 | 久久精品女人毛片国产 | 91精品中文字幕 | 奇米7777狠狠狠琪琪视频 | 91视频高清| 久久精品五月 | 夜夜躁日日躁 | 一级一片免费视频 | 国产一区欧美日韩 | www.狠狠干 | 9992tv成人免费看片 | 午夜视频日本 | 在线精品播放 | 国产超碰在线 | 日韩免费视频在线观看 | 一区二区三区免费 | 天堂av在线7 | 欧美精品国产综合久久 | 国产小视频在线看 | 天天爽夜夜爽人人爽曰av | 中文av日韩 | 天天射网| 国产老太婆免费交性大片 | 日韩精品极品视频 | 超碰99在线 | 天堂成人在线 | 99在线免费观看视频 | 日韩免费在线看 | 在线观看日韩精品视频 | 韩日视频在线 | 国产美女主播精品一区二区三区 | 国产精品久久久一区二区 | 97精品国自产拍在线观看 | 99 精品 在线 | 日韩电影一区二区在线观看 | а中文在线天堂 | 免费特级黄色片 | 国产精品国产自产拍高清av | 中文字幕在线观看第二页 | 国产精品久久久久久久婷婷 | 国产色拍拍拍拍在线精品 | 玖玖在线免费视频 | 在线观看久久久久久 | 福利视频区 | 亚洲一区二区三区91 | 91av欧美| 91香蕉亚洲精品 | 久久国产精品成人免费浪潮 | 国产在线观看 | 免费视频久久久久久久 | 99这里只有精品视频 | 国产九九九视频 | 在线你懂的视频 | 亚洲闷骚少妇在线观看网站 | 91亚洲精品乱码久久久久久蜜桃 | 精品中文字幕在线观看 | 日韩精品专区在线影院重磅 | 日韩av网站在线播放 | 国产xvideos免费视频播放 | 不卡的av在线播放 | 国产在线观看网站 | 91精品视频免费在线观看 | 国产精品ssss在线亚洲 | 日韩在线电影 | 国产手机在线精品 | 精品自拍sae8—视频 | 99精品在线免费视频 | 在线视频日韩欧美 | 欧美另类xxxxx | 黄色国产高清 | 亚洲电影免费 | 亚洲精品国内 | 日韩久久一区 | 免费在线色视频 | 91久久久久久国产精品 | 97在线观看免费观看高清 | 中文字幕一区二区三区四区视频 | 狠狠久久伊人 | 亚洲精品理论 | 久久99视频免费观看 | 色综合中文字幕 | 久久99久久99精品免视看婷婷 | 成人一级片免费看 | av天天在线观看 | 欧美超碰在线 | 久久夜夜爽 | 免费看国产精品 | 国产成人一区二区三区 | 伊人资源站| 日韩二区三区在线 | 欧美日韩另类在线观看 | 美女网站免费福利视频 | 国产美女精品久久久 | 中文字幕文字幕一区二区 | 在线播放日韩av | 91亚洲精品乱码久久久久久蜜桃 | av一区二区三区在线 | 中文字幕在线观看视频免费 | zzijzzij亚洲日本少妇熟睡 | 色全色在线资源网 | 亚洲一级特黄 | 久久久久久久久久久电影 | 久久久久久麻豆 | 免费久久片 | 日本午夜免费福利视频 | 综合天堂av久久久久久久 | 国产999精品久久久 免费a网站 | 午夜国产福利在线 | 国产成人免费av电影 | 精品日韩av| 不卡av在线播放 | 色网站免费在线观看 | 成年人av在线播放 | 亚洲香蕉视频 | 成人精品亚洲 | 久久久久高清 | 亚洲激情影院 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 欧美日韩一级久久久久久免费看 | 在线导航av| 日韩高清国产精品 | 国产亚洲成人网 | 99久久日韩精品免费热麻豆美女 | 久久人人插| 国产一级二级在线观看 | 免费在线观看的av网站 | 天天干天天想 | 丁香婷婷久久 | 国产免费一区二区三区最新6 | 亚洲乱码中文字幕综合 | 日韩欧美高清免费 | 国产高清精品在线 | 亚洲伦理中文字幕 | 伊人狠狠色 | 国语自产偷拍精品视频偷 | 国产成人综合在线观看 | 人人爱在线视频 | av一本久道久久波多野结衣 |